c++去除空格

string 的 erase

erase的函数定义

  • string& erase ( size_t pos = 0, size_t n = npos );
  • iterator erase ( iterator position );
  • iterator erase ( iterator first, iterator last );

对应的用法:

  • 删除字符串pos开始的n个字符
  • 删除字符串position(迭代器)处的一个字符
  • 删除字符串first(迭代器)到last(迭代器)之间的字符。

删除首尾空格

    string trim(string str)
    {
        //删除0到第一个不是空格的字符
        str.erase(0, str.find_first_not_of(" "));
        //删除最后一个不是空格的字符到字符串结尾
        str.erase(str.find_last_not_of(" ")+1, str.length());
        return str;
    }

测试

    int main()
    {
        string str = "  This is string ";
        string str1 = trim(str);
        cout<<"|"<<str<<"|"<<endl;  // |  This is string |
        cout<<"|"<<str1<<"|";       // |This is string|
        return 0;
    }

利用 find + erase 删除全部空格

每次从pos开始搜索,遇到空格就返回给pos,通过erase删除该处的空字符,因为find找不到指定的字符会返回结尾的迭代器,所以当pos等于结尾的迭代器时结束循环。

string trimAll(string str)
{
    string::iterator pos = str.begin();
    while(1)
    {
        pos = find(pos, str.end(), ' ');
        if(pos == str.end()) break;
        str.erase(pos);
    }
    return str;
}

测试

int main()
{
    string str = "  This is string ";
    string str1 = trimAll(str);
    cout<<"|"<<str<<"|"<<endl;   // |  This is string |
    cout<<"|"<<str1<<"|";        // |Thisisstring|
    return 0;
}

利用 remove_if + erase 删除

首先了解对于 remove_if(iterator first, iterator last, Predicate _pred) 函数并没有真的移除元素,它只是将符合 _pred 的元素依次替代前面的元素而已。

int main()
{
    vector<int> num = {1,2,3,4,5,6,7};
    // 移除小于3的元素
    remove_if(num.begin(), num.end(), [](int x){return x < 3;});
    for(auto n : num)
    {
        cout<<n<<" ";
    }
    return 0;
}

结果: 3 4 5 6 7 6 7
因为从3开始不符合 x < 3 的条件,所以将 3 代替 1, 4 代替 2,以此类推。最后返回最后一个不符合条件的迭代器。
因此,可以通过 remove_if 函数筛选出字符不为空格的元素,然后删除返回的迭代器位置到字符结尾位置的字符

string _trimAll(string str)
{
    auto itor = remove_if(str.begin(), str.end(), [](char c){return c == ' ';});
    str.erase(itor,str.end());
    return str;
}

测试

int main()
{
    string str = "  This is string ";
    string str1 = _trimAll(str);
    cout<<"|"<<str<<"|"<<endl;  // |  This is string |
    cout<<"|"<<str1<<"|";       // |Thisisstring|
    return 0;
}

文章首发来源

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值