Зміст

Заміна символів у рядку на C++

Постановка задачі

Необхідно написати програму на C++, яка:

  1. Зчитує з клавіатури рядок str та три символи symv1, symv2 та symv3
  2. Замінює у рядку str усі символи symv1 на symv2 від початку рядка до останнього входження symv3
  3. Якщо символів symv3 у рядку немає, виводить повідомлення
  4. Підтримує роботу з кириличними символами
Примітка: Для коректної роботи з кирилицею використовуємо wide-рядки (wstring) та wide-символи (wchar_t).

Розв'язок

#include <iostream>
#include <string>
#include <clocale>

using namespace std;

int main() {
    // Встановлюємо локаль для підтримки кирилиці
    setlocale(LC_ALL, "");
    
    wstring wstr;
    wchar_t symv1, symv2, symv3;
    
    // Введення даних
    wcout << L"Введіть рядок: ";
    getline(wcin, wstr);
    
    wcout << L"Введіть символ symv1: ";
    wcin >> symv1;
    wcin.ignore(); // Ігноруємо залишковий символ нового рядка
    
    wcout << L"Введіть символ symv2: ";
    wcin >> symv2;
    wcin.ignore();
    
    wcout << L"Введіть символ symv3: ";
    wcin >> symv3;
    wcin.ignore();
    
    // Знаходимо останнє входження symv3
    size_t last_pos = wstr.find_last_of(symv3);
    
    if (last_pos == wstring::npos) {
        wcout << L"Символу " << symv3 << L" не знайдено у рядку." << endl;
        return 0;
    }
    
    // Замінюємо symv1 на symv2 до останнього входження symv3
    for (size_t i = 0; i <= last_pos; i++) {
        if (wstr[i] == symv1) {
            wstr[i] = symv2;
        }
    }
    
    // Виводимо результат
    wcout << L"Результат: " << wstr << endl;
    
    return 0;
}

Пояснення коду

Важливо! Не забувайте викликати wcin.ignore() після введення кожного символу, щоб уникнути проблем з буфером введення.

Приклад роботи програми

Введіть рядок: Привіт, це тестовий рядок
Введіть символ symv1: і
Введіть символ symv2: І
Введіть символ symv3: й
Результат: ПрИвІт, це тестовий рядок

Зміст