удалить двойные кавычки из строки в C ++ - PullRequest
2 голосов
/ 15 апреля 2011

Я удаляю двойные кавычки из строки, но продолжаю получать эту ошибку из следующей функции. В чем здесь проблема?

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

[ERROR]

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* для аргумента 1 в int remove(const char*)

Ответы [ 5 ]

7 голосов
/ 15 апреля 2011

Разве вы не хотите что-то вроде:

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

Когда remove возвращает "Прямой итератор, указывающий на новый конец последовательности, который теперь включает все элементы со значением, отличным от значения"вместо удаления значений.

Хотя он прекрасно компилируется (с gcc 4.4), так что, возможно, вам просто нужно включить <algorithm> и убедиться, что вы либо using namespace std, либо указали имя.

4 голосов
/ 15 апреля 2011

Есть ли у вас stdio.h в комплекте?Тогда может возникнуть конфликт с remove.Это причина, по которой вы всегда должны ставить префикс std -all, ну, в общем, std::.

2 голосов
/ 15 апреля 2011

Используйте std::remove, а не remove

1 голос
/ 15 апреля 2011

удалить требует заголовок algorithm и находится в std пространстве имен

Я считаю C ++ Reference очень полезным для быстрого получения примеров использования и того, какие заголовки требуются. Он может не иметь полной информации о некоторых вещах, но он может послужить хорошим началом, если я не уверен в том, как использовать некоторые части библиотеки C, библиотеки потоков, библиотеки строк, контейнеров STL или алгоритмов STL

1 голос
/ 15 апреля 2011

remove - алгоритм, поэтому вам нужно сделать #include <algorithm>.Тогда при использовании вы должны использовать его как std::remove(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...