64,643
社区成员
发帖
与我相关
我的任务
分享
//发现无法彻底删除连续出现且相等的非打印字符, 更疑惑的是居然连计数器都发生了变化.
//下面是代码 :
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
string expression("a\t\tb\n\nc");
cout << expression << endl;
int count = 0;
for (std::string::iterator i = expression.begin(); i != expression.end(); ++i)
if (!isprint(*i)) {
++count;
//expression.erase(i);
}
cout << "nonprint character counting : " << count << endl;
cout << expression << endl;
}
a b
c
nonprint character counting : 4
a b
c
a b
c
nonprint character counting : 2
a b
c
//发现无法彻底删除连续出现且相等的非打印字符, 更疑惑的是居然连计数器都发生了变化.
//下面是代码 :
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string expression("a\t\tb\n\nc");
cout << expression << endl;
int count = 0;
for (std::string::iterator i = expression.begin(); i != expression.end();)
if (!isprint(*i)) {
++count;
i = expression.erase(i);//erase导致迭代器失效
}
else
++i;
cout << "nonprint character counting : " << count << endl;
cout << expression << endl;
}
for (std::string::iterator i = expression.begin(); i != expression.end(); ) {
if (!isprint(*i)) {
++count;
i = expression.erase(i);
} else
i++;
}