今天我有一个非常简单的给你,但它确实让我难倒了好几个小时。我想我的字符串迭代器的字幕有问题。我在网上查看了代码,甚至将代码传递给了我的 CSE 教授——但由于感恩节假期,他只有手机,无法提供太多帮助。
希望有人可以看到这个并立即发现问题。作为说明,我的目标只是从字符串中删除特殊字符。该字符串通过引用传递给函数(因此不需要返回类型)。作为补充说明,我正在努力使其尽可能高效。我最初的想法是简单地将其转移到嵌套的 for 循环,但我的 CSE 教授认为,在某些特殊情况下,内部带有字符串迭代器的 for 循环更有效,所以我应该坚持下去。请让我知道是否有人可以提供帮助!
在我看来,问题必须出在 remove 函数上,因为 remove 需要一个 const char *,而不仅仅是一个 char *。我假设 text.begin() 不是 const ,因此会导致问题。但是如果我把函数的参数设为const string &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*)’
任何想法将不胜感激!