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

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要加一,所以这里要减一,才可以重新判断这个迭代器指向的字符。

代码测试运行结果如下图所示
程序测试运行结果

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值