У меня есть следующий код в методе строкового типа, который читает слова из файла, удаляет все неалфавитные символы (как показано ниже) из начала слова и возвращает их после этого. После распечатки результатов в основном методе, я заметил, что, хотя он должен удалить все не алфавитные символы с самого начала, он все равно выдает 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;
Я был бы признателен, если бы кто-то мог сказать мне, что, черт возьми, я не вижу. Я пробовал все разные функции, например Стереть (), исальфа () и т. д. Все они дают один и тот же результат, когда не должны. Что я делаю, чтобы запретить удаление последнего не алфавитного символа (в начале слова)?
Я попытался сделать то же самое, чтобы удалить все знаки препинания в конце слова, но он удалил все, кроме одного (снова).
Спасибо за ваше время
Ваш цикл пропускает символы, так как вы удаляете элемент и продолжаете. Если вы удалите, вы должны уменьшить i
потому что следующая буква находится в той же позиции после стирания. Или вы должны иметь цикл while для каждой позиции, стирая эту позицию, пока она не станет альфа или концом, но уменьшится i
проще и менее подвержен ошибкам.
Выполнение кода в отладчике немедленно показало бы эту проблему в логике.
Других решений пока нет …