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

c++中的字符串中删除空格

默认情况下,下面的字符被视为空白字符:

1
2
3
4
5
6
1. 空格 ' '
2. 换行 '\n'
3. 回车 '\r'
4. 水平制表符 '\t'
5. 换页 '\f'
6. 垂直制表符 '\v'

std::remove_if 算法实际上并不从字符串中删除字符,而是移动所有“给定谓词”字符到前面,并返回一个指向结束位置的迭代器。然后我们可以通过调用 std::erase 来删除给定的谓词

  1. 使用 std::isspace

    1
    2
    std::string str = "Hello \n\n world\n";
    s.erase(std::remove_if(s.begin(), s.end(), ::isspace), s.end());
  2. 自己实现

    1
    2
    3
    4
    5
    6
    bool isSpace(unsigned char c) {
    return (c == ' ' || c == '\n' || c == '\r' ||
    c == '\t' || c == '\v' || c == '\f');
    }
    std::string s = "Hello \n\nWorld";
    s.erase(std::remove_if(s.begin(), s.end(), isSpace), s.end());
  3. lambda

    1
    2
    3
    4
    5
    6
    s.erase(std::remove_if(s.begin(), s.end(),
    [](char c) {
    return (c == ' ' || c == '\n' || c == '\r' ||
    c == '\t' || c == '\v' || c == '\f');
    }),
    s.end());
  4. 使用 std::regex_replace 功能

    正则表达式中,\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

    1
    2
    3
    std::string s = "hello \n World \r";
    std::regex r("\\s+");
    s = std::regex_replace(s, r, "");
  5. boost 库功能

    1
    2
    std::string s = "hello world";
    boost::algorithm::erase_all(s, " ");