从字符串中删除字符

时间:2013-12-02 12:09:12

标签: c++

要从给定字符串中删除字符集,我已实现此功能。

    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

这个实现有什么问题。

3 个答案:

答案 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';