C++删除字符串中所有空格
我百度了好多帖子,都是互相抄的,用的递归,递归不好理解,我就用的迭代器,遍历string,碰到空格就删掉。这样很好理解。
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
int main()
{
string str_test;
while (1) {
/*下面两句清空缓冲区的*/
cin.clear();
cin.sync();
getline(cin,str_test);
for(auto iter = str_test.begin();iter != str_test.end();iter ++){
if(isblank(*iter) != 0){ //isblank判断是否为制表符或者空格,是的话返回非零值
//需包含头文件<ctype.h>
str_test.erase(iter--); // --是因为重新判断一下填过来的字符
}
}
cout << str_test << endl;
}
return 0;
}
有一点不好理解的就是这句:
str_test.erase(iter--);
这里迭代器为什么要减一呢?
如果删掉此迭代器指向的空格,后面的字符会填到这个位置,你还要重新判断一下这个位置是不是空格,for循环最后iter要加一,所以这里要减一,才可以重新判断这个迭代器指向的字符。
代码测试运行结果如下图所示