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

remove是算法,因此你需要做#include <algorithm>. 然后在使用时您应该将其用作std::remove(...).

于 2011-04-15T08:55:29.520 回答
1

remove需要algorithm标头并且来自std命名空间

我确实发现C++ 参考对于快速获取使用示例和所需的标头非常有帮助。它可能没有关于某些事情的完整信息,但如果我不确定如何使用 C 库、流库、字符串库、STL 容器或 STL 算法的某些部分,它可以作为一个好的开始

于 2011-04-15T09:21:47.063 回答
1

您可以使用以下代码从 C++ 中的字符串中删除双引号。

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