@SilentGr0ve
Первокурсник

Как вставить элемент в строку после определенного условия?

Дана строка содержащая латинские буквы. После каждой согласной буквы вставить !.
Написал программу, но она выводит ! после каждого элемента. В чём может быть ошибка?
#include <string>
#include <iostream>
using namespace std;
int main()
{
    string str; //объявление строки
    string str1 = "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM";
    cout << "Введите строку: ";
    getline(cin,str); //ввод строки
    string:: size_type i = 0;
    while (i < str.size()){
        if (str.find_first_of(str1,i)) {
            str.insert(i + 1, 1 ,'!');
            i += 2;
        }
        else i += 1;
    }
    cout << "Изменённая строка: " << str << endl;; //вывод строки
    return 0;
}
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 3
find_first_of() возвращает либо позицию, либо string::npos. То есть будет срабатывать почти всегда (кроме первого элемента строки). Правильно: if (find_first_of(...) != string::npos).
Ответ написан
Комментировать
Надо не просто проверять возврат функции find_first_of на неравенство string::npos, но и использовать результат функции в качестве указания места, где находится согласная буква.
int main()
{
    string str; //объявление строки
    string str1 = "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM";
    cout << "Введите строку: ";
    getline(cin,str); //ввод строки
    size_t i = 0;
    while (i < str.size())
    {
        if (auto n = str.find_first_of(str1, i); n != string::npos) 
        {
            str.insert(n + 1, 1 ,'!');
            i = n + 1;
        }
        else i += 1;
    }
    cout << "Изменённая строка: " << str << endl;; //вывод строки
    return 0;
}
Ответ написан
Kiberchief
@Kiberchief
Пока учусь.
int main()
{
string str1; //Вводимая строка
getline(cin, str1);
string str2 = "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM"; //буквы которые необходимо найти

for (size_t i = 0; i < str1.size(); i++) {
for (auto s : str2)
if (str1[i] == s) {
str1.insert(i + 1, "!");
}
}
cout << str1;
return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы