我正在从字符串中删除双引号,但我不断从以下函数中获取此错误。这有什么问题?
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
答案 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());