这是我目前所拥有的:
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/