从c ++中的字符串中删除双引号

时间:2011-04-15 08:49:55

标签: c++ string double-quotes

我正在从字符串中删除双引号,但我不断从以下函数中获取此错误。这有什么问题?

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> > >的{​​{1}}转换为const char*1

6 个答案:

答案 0 :(得分:7)

你不想要这样的东西:

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

remove返回“指向序列新结尾的前向迭代器时,它现在包含值不是值的所有元素”,而不是删除值。

尽管如此(使用gcc 4.4)它编译得很好,所以你可能只需要包含<algorithm>并确保你是using namespace std或者限定名称。

答案 1 :(得分:4)

您是否包含stdio.h?然后可能与remove发生冲突。这就是为什么你总是应该std前缀 - 呼叫,std::

答案 2 :(得分:2)

使用std::remove而不是remove

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

我发现C++ Reference非常有助于快速获取使用示例以及需要哪些标头。它可能没有完整的信息,但如果我不确定如何使用C库的某些部分,流库,字符串库,STL容器或STL算法,它可以作为一个良好的开端

答案 5 :(得分:0)

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

stringVariable.erase(
    std::remove(stringVariable.begin(), stringVariable.end(), '\"'), 
    stringVariable.end());