Автор Арсен Арутюнян задал вопрос в разделе Другие языки и технологии
C++ string insert и получил лучший ответ
Ответ от Капитан Гугл[гуру]
Потому что строка бесконечно удлинняется, добавляя в каждой итерации точку.
И вообще
const char X[] = "AOYEUI";
...
if(strchr(X,toupper(st[ i]))...//правда, проще? Арсен Арутюнян
Гуру
(4600)
1) удаляет все гласные буквы,
2) перед каждой согласной буквой ставит символ ".",
Ответ от Дима[мастер]
У тебя программа зацикливается вот здесь:
for(int i = 0; i < st.length(); i++)
Из-за этого:
else st.insert(i, ".");
Сделай break для вывода из цикла во вложенном цикле, как вариант, но я сомневаюсь что она будет работать, т. к. не понимаю окончательной задачи
У тебя программа зацикливается вот здесь:
for(int i = 0; i < st.length(); i++)
Из-за этого:
else st.insert(i, ".");
Сделай break для вывода из цикла во вложенном цикле, как вариант, но я сомневаюсь что она будет работать, т. к. не понимаю окончательной задачи
Ответ от Николай Веселуха[гуру]
Так нагляднее?
#include <iostream>
#include <string>
using namespace std;
bool is_vowel(wchar_t);
bool is_consonant(wchar_t);
bool logic(wstring, wchar_t);
int main() {
wcout.imbue(locale(".866"));
wcin.imbue(locale(".866"));
wstring text(L"Мама мыла раму, Алла читала книгу! ");
wcout << text << endl;
size_t size = text.size();
rsize_t letter = 0;
while (letter < size) {
if (is_vowel(text.at(letter)) {
text.erase(letter, 1);
--size;
} else if (is_consonant(text.at(letter)) {
text.insert(letter, L".");
++size;
letter += 2;
} else ++letter;
}
wcout << text << endl;
cin.get(); cin.get();
return 0;
}
bool is_consonant(wchar_t _letter) {
wstring src(L"БбВвГгДдЖжЗзЙйКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщЪъЬь");
return logic(src, _letter);
}
bool is_vowel(wchar_t _letter) {
wstring src(L"АаЕеЁёИиОоУуЫыЭэЮюЯя");
return logic(src, _letter);
}
bool logic(wstring _src, wchar_t _letter) {
bool vowel = false;
const size_t size = _src.size();
for (rsize_t letter = 0; letter < size; letter++)
if (_letter == _src.at(letter)) {
vowel = true;
break;
}
return vowel;
}
Так нагляднее?
#include <iostream>
#include <string>
using namespace std;
bool is_vowel(wchar_t);
bool is_consonant(wchar_t);
bool logic(wstring, wchar_t);
int main() {
wcout.imbue(locale(".866"));
wcin.imbue(locale(".866"));
wstring text(L"Мама мыла раму, Алла читала книгу! ");
wcout << text << endl;
size_t size = text.size();
rsize_t letter = 0;
while (letter < size) {
if (is_vowel(text.at(letter)) {
text.erase(letter, 1);
--size;
} else if (is_consonant(text.at(letter)) {
text.insert(letter, L".");
++size;
letter += 2;
} else ++letter;
}
wcout << text << endl;
cin.get(); cin.get();
return 0;
}
bool is_consonant(wchar_t _letter) {
wstring src(L"БбВвГгДдЖжЗзЙйКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщЪъЬь");
return logic(src, _letter);
}
bool is_vowel(wchar_t _letter) {
wstring src(L"АаЕеЁёИиОоУуЫыЭэЮюЯя");
return logic(src, _letter);
}
bool logic(wstring _src, wchar_t _letter) {
bool vowel = false;
const size_t size = _src.size();
for (rsize_t letter = 0; letter < size; letter++)
if (_letter == _src.at(letter)) {
vowel = true;
break;
}
return vowel;
}
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C++ string insert