私は今日あなたのために非常に単純なものを持っています、しかしそれは確かに私を何時間も困惑させました。文字列イテレータの字幕に問題があると思います。私はオンラインで調べて、コードをCSEの教授に渡しましたが、感謝祭の休憩だったので、彼は電話しか持っておらず、あまり役に立ちませんでした。
うまくいけば、誰かがこれを見て、すぐに問題を見つけることができます。注意として、私の目標は単に文字列から特殊文字を削除することです。この文字列は参照によって関数に渡されます(したがって、戻り型は必要ありません)。追記として、私はこれを可能な限り効率的に保つように努めています。私の当初の考えは、これをネストされたforループに単純にシフトすることでしたが、CSEの教授は、一部の特殊なケースでは、文字列イテレータを含むforループの方が効率的であると主張しています。誰か助けてくれたら教えてください!!
removeは単なるchar*ではなく、const char *を受け取るため、問題はremove関数にある必要があるように思われます。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*)’
どんな考えでも大歓迎です!