c++ - 在 C++ 中从用户输入中剥离/删除符号

标签 c++ string ascii

这是我目前所拥有的:

string stripSymbols(string str) {
    int stringSize = strlen(str.c_str());

    for (int i = 0; i < stringSize; i++)
        if (str[i] == 0x46)
            str[i] = 0x32;
    return str;
}

我知道 ascii 码可能是错误的。这是问题的一部分。但是一旦我弄明白了这些,我想我可以在这里为每个符号放置一个开关,用一个空格替换每个符号。

或者更好的是,我可以在我的 for 循环中有一个 for 循环,循环遍历一串符号,并将与用户输入匹配的任何符号替换为空格。

我有几个想法,但我想知道是否有更有效的方法。

更新 1:

这段代码看起来好一点并且可以工作:

string stripSymbols(string str) {
    int stringSize = str.size();
    for (int i = 0; i < stringSize; i++)
        if (str[i] == '.')
            str[i] = ' ';
    return str;
}

但回复提供了更有效的解决方案。

更新 2:

解决方案灵感来自 Kerrek SB 的回复:

char symbols [] = {'!', '?', ',', '\'', '.'};
int symbols_size = sizeof(symbols) / sizeof(char);  

for (int j = 0; j < symbols_size; j++)
    replace(str.begin(), str.end(), symbols[j], ' ');

最佳答案

如果您想用空格替换任何非字母数字字符:

std::replace_if(str.begin(), str.end(), [](char c){return !std::isalnum(c);}, ' ');

关于c++ - 在 C++ 中从用户输入中剥离/删除符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317639/

相关文章:

c++ - (C++) 关于语法的非常基本的问题

javascript - 为什么对 html 属性使用变量?

java - 转义正则表达式字符串中的每个文字而不是引用整个字符串

返回与 R 中指定的 Ascii 代码关联的字符

c++ - 获取多行的字符串

C++ 代码生成

c - 在 C 中解析简单数字 (ASCII) 文件不起作用

java - 如何将 ASCII 码 (0-255) 转换为其对应的字符?

c++ - C、C++ : Shared libraries: Are single functions or complete libraries loaded into memory?

java - 在字符串列表中搜索