0

我在 C++ 中有以下形式的字符串

   string variable1="This is stackoverflow \"Here we go "1234" \u1234 ABC";

现在在这个字符串中,我想删除除字母(从 a 到 b,以及 A 到 B)和数字之外的所有字符。这样我的输出就变成了

   variable1="This is stackoverflow Here we go 1234 u1234 ABC";

我尝试使用指针检查每个字符,但发现效率很低。有没有一种有效的方法可以使用 C++/C 实现相同的目标?

4

2 回答 2

7

使用std::remove_if

#include <algorithm>
#include <cctype>

variable1.erase(
    std::remove_if(
        variable1.begin(),
        variable1.end(),
        [] (char c) { return !std::isalnum(c) && !std::isspace(c); }
    ),
    variable1.end()
);

请注意, 和 的行为std::isalnum取决于std::isspace当前的语言环境。

于 2013-10-28T17:42:39.617 回答
2

工作代码示例:http: //ideone.com/5jxPR5

bool predicate(char ch)
    {
     return !std::isalnum(ch);
    }

int main() {
    // your code goes here


    std::string str = "This is stackoverflow Here we go1234 1234 ABC";

    str.erase(std::remove_if(str.begin(), str.end(), predicate), str.end());
    cout<<str;
    return 0;
}
于 2013-10-28T17:55:07.117 回答