4

文字列から二重引用符を削除していますが、次の関数からこのエラーが発生し続けます。ここで何が問題なのですか?

void readCSVCell(stringstream& lineStream, string& s) {
    std::getline(lineStream,s,',');
    s.erase(remove( s.begin(), s.end(), '\"' ), s.end());
}

[エラー]

c.cpp: 関数内void readCSVCell(std::stringstream&, std::string&):
c.cpp:11: エラー: に引数を変換__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >できconst char*ませ1int remove(const char*)

4

6 に答える 6

13

次のようなものは必要ありませんか?

s.erase(remove( s.begin(), s.end(), '\"' ),s.end());

Asremoveは、値を削除するのではなく、「値以外の値を持つすべての要素を含む、シーケンスの新しい末尾を指す前方反復子」を返します。

ただし、(gcc 4.4 を使用して) 私にとっては問題なくコンパイルされるため、名前を含める<algorithm>using namespace std修飾する必要があるだけかもしれません。

于 2011-04-15T08:52:07.217 に答える
4

含まれてstdio.hいますか?と競合する可能性がありremoveます。これが、std-calls の前に常にstd::.

于 2011-04-15T08:52:12.177 に答える
3

使用しstd::removeないremove

于 2011-04-15T08:53:04.253 に答える
1

削除algorithmにはヘッダーが必要で、std名前空間からのものです

C++ リファレンスは、使用例と必要なヘッダーをすばやく取得するのに非常に役立ちます。C ライブラリ、ストリーム ライブラリ、文字列ライブラリ、STL コンテナ、または STL アルゴリズムの一部を使用する方法がわからない場合は、良い出発点として役立ちます。

于 2011-04-15T09:21:47.063 に答える
1

removeはアルゴリズムなので、実行する必要があります#include <algorithm>。次に、使用中は として使用する必要がありますstd::remove(...)

于 2011-04-15T08:55:29.520 に答える
1

以下のコードを使用して、C++ の文字列から二重引用符を削除できます。

stringVariable.erase(
    std::remove(stringVariable.begin(), stringVariable.end(), '\"'), 
    stringVariable.end());
于 2020-02-18T15:45:01.080 に答える