C ++从单词的开头删除非字母字符

时间:2015-11-07 07:16:20

标签: c++ iostream ifstream erase-remove-idiom

我在字符串类型的方法中有以下代码,它从文件中读取单词,从单词的开头删除所有非字母字符(如下所示),并在它执行后返回它们。在主方法中打印出结果后,我注意到即使它应该从头开始删除所有非字母字符,它仍然会打印出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;

如果有人能告诉我我到底是怎么回事,我将不胜感激。我尝试过所有不同的功能,例如擦除(),isalpha()等等。当它不应该时,它们都会产生相同的结果。我在做什么是禁止删除最后一个非字母字符(在一个单词的开头)? 我尝试删除一个单词末尾的所有标点符号,但除了一个(再次)之外它会删除所有标点符号。

感谢您的时间

1 个答案:

答案 0 :(得分:2)

您的循环会跳过字符,因为您删除了一个项目并继续。如果删除,则必须减少i,因为删除后下一个字母位于相同位置。或者你必须为每个位置删除一个while循环,直到它是alpha或end,但减少i更简单,更不容易出错。

在调试器上运行代码会立即在逻辑中显示此问题。