У вас 2 проблемы в вашем коде.
Сначала вы стираете строку внутри l oop (что меняет ее длину), но при сравнении использует предварительно вычисленную длину.
Во-вторых, вам нужно увеличивать i
только в том случае, если вы не стираете символ. В противном случае вы пропустите некоторые символы.
Рабочий l oop будет:
for (i = 0; i < userPhrase.size();) {
charAti = userPhrase.at(i);
if ( !isupper(charAti)) {
userPhrase.erase(i,1);
}
else {
++i;
}
}
Вы можете упростить этот l oop с помощью алгоритма:
string CreateAcronym(string userPhrase) {
userPhrase.erase(std::remove_if(userPhrase.begin(),
userPhrase.end(), [](auto charAti) {
return !isupper(charAti); }),
userPhrase.end());
return userPhrase;
}
Вот демонстрация .