加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当字符串的最后一个位置是标点符号时,程序停止解析

发布时间:2020-12-16 09:44:02 所属栏目:百科 来源:网络整理
导读:所以我试图从文件中读取所有单词,并在我这样做时摆脱标点符号.这是剥离标点符号的逻辑: 编辑:程序实际上完全停止运行,只是想清楚 ifstream file("text.txt");string str;string::iterator cur;for(filestr; !file.eof(); filestr){ for(cur = str.begin();
所以我试图从文件中读取所有单词,并在我这样做时摆脱标点符号.这是剥离标点符号的逻辑:

编辑:程序实际上完全停止运行,只是想清楚

ifstream file("text.txt");

string              str;
string::iterator    cur;

for(file>>str; !file.eof(); file>>str){
    for(cur = str.begin(); cur != str.end(); cur++){
         if (!(isalnum(*cur))){
            cur = str.erase(cur);
         }
    }
cout << str << endl;
...
}

假设我有一个文本文件,内容如下:

This is a program. It has trouble with (non alphanumeric chars)

But it's my own and I love it...

当我cout和endl;我的字符串就在这个逻辑之后,我会得到的

This
is
a
program
It
has
trouble
with
non
alphanumeric

这就是所有人.
我的迭代器逻辑有问题吗?
我怎么能解决这个问题?

谢谢.

解决方法

我看到迭代器的主要逻辑问题是,对于非字母数字字符,迭代器会增加两次:在擦除期间它移动到下一个符号然后从for循环中的cur增加它,因此它会在非字母数字后跳过每个符号.

所以可能有以下几点:

string              next;
string::iterator    cur;

cur = next.begin()
while(cur != next.end()){
    if (!(isalnum(*cur))){
        cur = next.erase(cur);
    } else {
        cur++;
    }
}

这只是删除非字母数字字符.如果你需要标记你的输入,你将不得不实现更多,即记住,你是否在一个单词内(已经读过至少一个字母数字字符),并相应地采取行动.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读