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

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

<分区>

我在字符串类型的方法中有以下代码,它从文件中读取单词,从单词的开头删除所有非字母字符(如下所示),并在完成后返回它们。在 main 方法中打印出结果后,我注意到即使它应该从开头删除所有非字母字符,它仍然始终打印出 1,例如: 该列表包含单词:

那里,--曾经有一只可爱的小兔子,他被 Gunicorn 了,故事结束

应用该函数后,输出为:

曾经有一只可爱的小兔子,他被 Gunicorn 了,故事结束

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() 等。当不应该时,它们都会产生相同的结果。我在做什么禁止删除最后一个非字母字符(在单词的开头)? 我尝试同样删除单词末尾的所有标点符号,但它会删除除一个(再次)以外的所有标点符号。

谢谢你的时间

最佳答案

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

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

关于C++从单词的开头删除非字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33580231/

相关文章:

c++ - 为什么 ostream iomanip 在传递给操作符 << 时不需要模板参数?

c++ - cout 和字符串连接

c++ - 从输入文件写入输出文件

c++ - 我不能在调用 istream 作为参数的函数中使用 ifstream 吗?

c++ - 工厂类的依赖注入(inject)

c++ - 如何保证 C++ 类型的位数

c++ - 虚幻引擎因 AddDynamic 而崩溃

c++ - 复数打印程序出现故障

c++ - 在 C++ 中读取二进制文件时丢失数据

c++ - 在不移动文件位置的情况下从文件中读取下一个字符串的快速方法