要从给定字符串中删除字符集,我已实现此功能。
void removeChars (string& str, const string& chars)
{
vector <bool> v (256, false);
for (int i=0; i < chars.size(); ++i)
{
v[chars[i]] = true;
}
int k=0;
for (int j=0; j < str.size(); ++j)
{
if (v[str[j]]==false)
{
str[k] = str[j];
++k;
}
}
str[k] = '\0';
}
但是从这个函数处理完字符串之后。它打印一些垃圾价值。
string s1 = "trying to remove chars from string";
string s2 = "tr";
removeChars2 (s1, s2);
现在打印s1
ying o emove chas fom sing string
Expected : ying o emove chas fom sing
这个实现有什么问题。
答案 0 :(得分:2)
使用STL算法,您不必重新实现所有内容:)
string text("trying to remove chars from string");
char toRemove[] = "tr";
for (unsigned int i = 0; i < strlen(toRemove); ++i)
text.erase(std::remove(text.begin(), text.end(), toRemove[i]), text.end());
std::cout << text << std::endl;
答案 1 :(得分:1)
您不应该为std::string
添加终止符,它会以其他方式跟踪字符串结尾。
我建议您不要直接修改str
,而是建议您将字符附加到新字符串,然后在完成后将该字符串复制到str
。
答案 2 :(得分:0)
使用str.resize(k);
代替str[k] = '\0';