编辑:程序实际上完全停止运行,只是想清楚
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;我的字符串就在这个逻辑之后,我会得到的
ThisisaprogramIthastroublewithnonAlphanumeric
这就是所有人.
我的迭代器逻辑有问题吗?
我怎么能解决这个问题?
谢谢.
解决方法 我看到迭代器的主要逻辑问题是,对于非字母数字字符,迭代器会增加两次:在擦除期间它移动到下一个符号然后从for循环中的cur增加它,因此它会在非字母数字后跳过每个符号.所以可能有以下几点:
string next;string::iterator cur;cur = next.begin()while(cur != next.end()){ if (!(isalnum(*cur))){ cur = next.erase(cur); } else { cur++; }}
这只是删除非字母数字字符.如果你需要标记你的输入,你将不得不实现更多,即记住,你是否在一个单词内(已经读过至少一个字母数字字符),并相应地采取行动.
总结以上是内存溢出为你收集整理的c – 当字符串的最后一个位置是标点符号时,程序停止解析全部内容,希望文章能够帮你解决c – 当字符串的最后一个位置是标点符号时,程序停止解析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)