这是我到目前为止所拥有的:
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], ' ');
答案 0 :(得分:3)
如果您想用空格替换任何非字母数字字符:
std::replace_if(str.begin(), str.end(), [](char c){return !std::isalnum(c);}, ' ');
答案 1 :(得分:2)
答案 2 :(得分:2)
如果我想要一个强大的解决方案,我可能只会使用boost::regex_replace
:
// regex with illegal characters
std::string output = boost::regex_replace(str, "[!@#%]", " ");
答案 3 :(得分:2)
我会尝试这样的事情:
std::replace(str.begin(), str.end(), 0x46, 0x32);
您甚至可以在原始环境中执行此操作,无需单独的功能。您需要#include <algorithm>
。
答案 4 :(得分:0)
您是否希望从std::string
删除/替换特定字符的每个实例?如果是这样,请参阅以下类似问题:
How to replace all occurrences of a character in string?
Remove spaces from std::string in C++
只需使用答案中显示的概念来满足您自己的目标。