C++ удаляет неалфавитные символы из начала слова

У меня есть следующий код в методе строкового типа, который читает слова из файла, удаляет все неалфавитные символы (как показано ниже) из начала слова и возвращает их после этого. После распечатки результатов в основном методе, я заметил, что, хотя он должен удалить все не алфавитные символы с самого начала, он всегда по-прежнему печатает 1, например: Список содержит слова:

Там, когда-то был милый, маленький кролик, и его застрелили, конец истории

После применения функции на выходе было:

Там-как только был милый, маленький кролик, и его застрелили, конец истории

inFile >> word;
    for(int i=0; i<word.size(); i++){
        if(word[i] >= 'A' && word[i] <= 'Z' || word[i] >= 'a' && word[i] <= 'z')  break;
        else word.erase(i,1);
    }
    return word;

Я был бы признателен, если бы кто-то мог сказать мне, что, черт возьми, я не вижу. Я пробовал все различные функции, например, Erase(), isalpha() и т. Д. Они все дают одинаковый результат, когда это не должно. Что я делаю, чтобы запретить удаление последнего не алфавитного символа (в начале слова)? Я попытался сделать то же самое, чтобы удалить все знаки препинания в конце слова, но он удалил все, кроме одного (снова).

Спасибо за ваше время

1 ответ

Решение

Ваш цикл пропускает символы, так как вы удаляете элемент и продолжаете. Если вы удалите, вы должны уменьшить i потому что следующая буква находится в той же позиции после стирания. Или вы должны иметь цикл while для каждой позиции, стирая эту позицию, пока она не станет альфа или концом, но уменьшится i проще и менее подвержен ошибкам.

Выполнение кода в отладчике немедленно показало бы эту проблему в логике.

Другие вопросы по тегам