C++删除字符串中所有空格

C++删除字符串中所有空格

我百度了好多帖子,都是互相抄的,用的递归,递归不好理解,我就用的迭代器,遍历string,碰到空格就删掉。这样很好理解。

#include 

#include 

#include 

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判断是否为制表符或者空格,是的话返回非零值 
           								 //需包含头文件

                str_test.erase(iter--); // --是因为重新判断一下填过来的字符

            }

        }
        cout << str_test << endl;
    }

    return 0;
}

有一点不好理解的就是这句:

str_test.erase(iter--);

这里迭代器为什么要减一呢?

如果删掉此迭代器指向的空格,后面的字符会填到这个位置,你还要重新判断一下这个位置是不是空格,for循环最后iter要加一,所以这里要减一,才可以重新判断这个迭代器指向的字符。

代码测试运行结果如下图所示
C++删除字符串中所有空格_第1张图片

你可能感兴趣的:(c++,字符串)