c++ - 使用迭代器从字符串中删除特殊字符

标签 c++ string iterator special-characters erase

今天我为您准备了一个非常简单的方法,但它确实让我困惑了几个小时。我想我的字符串迭代器的字幕有问题。我在网上查看过,甚至将代码传递给了我的 CSE 教授 - 但由于是感恩节假期,他只有手机,无法提供太多帮助。

希望有人能看到这个并立即发现问题。请注意,我的目标只是从字符串中删除特殊字符。该字符串通过引用传递给函数(因此不需要返回类型)。作为附加说明,我正在努力使它尽可能高效。我最初的想法是简单地将其转换为嵌套的 for 循环,但我的 CSE 教授坚持认为内部带有字符串迭代器的 for 循环在某些特殊情况下效率更高,所以我应该坚持下去。如果有人可以提供帮助,请告诉我!!

在我看来,问题一定出在 remove 函数上,因为 remove 需要一个 const char *,而不仅仅是一个 char *。我假设 text.begin() 不是 const,因此会导致问题。但是如果我将函数的参数设为const string &text,显然我们不能通过引用来修改text。

这是我目前的代码:

我们主要有:

 string temp = "~cool~";
 XML * parser = new XML();
 parser->clearSpecialChars(temp);
 cout << temp;

函数是:

void XML::clearSpecialChars(string &text)
{
    char chars[]= ".,!()1234567890[]'<>:/{}_|=+;-`~";
        for (unsigned int i = 0; i < 33; ++i)
        {
            text.erase(std::remove(text.begin(),text.end(),chars[i]),text.end());
        }
 }

然而,我得到一个编译器错误:

 XML.cpp: In member function ‘void XML::clearSpecialChars(std::string&)’:
 XML.cpp:86:69: error: cannot convert ‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’
 to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’

如有任何想法,我们将不胜感激!

最佳答案

关于c++ - 使用迭代器从字符串中删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537808/

相关文章:

c++ - C++中迭代器的重要性

c++ - c++中比较vector等随机访问迭代器时,<>的比较内容是什么?

c++ - C++ 中的跨平台 OOP

c++ - 有没有一种简单的方法可以使用 native C++ 代码(VS2010)和 Bamboo 执行 CI?

string - 将 ASCII 字符值的字符串转换为 swift 2 中的实际字符串(最新测试版)

Swift:链接字符串/子字符串方法会产生 'ambiguous use of' 错误。修复还是替代?

java - 我应该避免使用从 Java 8 开始的迭代器吗?它们还有适当的用途吗?

c++ - Qt Model-View框架中如何替换children?

c++ - 操作系统 : Linker error for boost/filesystem with Xcode 8 and C++ 11

java - 如何使用正则表达式计算文本中的字数?