在 C++ 中从字符串中移除双引号

6
我正在从字符串中去除双引号,但是我一直在使用以下函数时遇到这个错误。这里的问题是什么?
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*,作为int remove(const char*)的参数1。

1
你有检查过这个问题吗?https://dev59.com/8HRB5IYBdhLWcg3wroyB - Zuljin
你是否已经包含了 #include <algorithm> - Naveen
添加“algorithm”头文件并加上std命名空间前缀解决了问题。 - user236215
6个回答

14

你不想要类似这样的东西吗:

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

由于remove返回"指向序列新结尾的前向迭代器,其中现在包括所有值不等于value的元素",而不是删除这些值。

对我来说它可以正常编译(使用gcc 4.4),所以也许您只需要包括<algorithm>并确保您要么using namespace std,要么限定名称。


它在我的电脑上编译正常,所以我猜错误可能是与remove的命名空间或另一个头文件的冲突,就像Space_C0wb0y所建议的那样。 - Jeff Foster

4

您是否已经包含了stdio.h?如果是,那么可能会与remove发生冲突。这就是为什么您应该始终在std::前缀中使用std-调用的原因。


3

使用std::remove而不是remove


2
你可以使用以下代码在C++中删除字符串中的双引号。
stringVariable.erase(
    std::remove(stringVariable.begin(), stringVariable.end(), '\"'), 
    stringVariable.end());

1

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


1

remove需要包含algorithm头文件,并且来自std命名空间。

我发现C++参考手册对于快速获取用法示例和所需头文件非常有帮助。虽然它可能没有某些内容的完整信息,但如果我不确定如何使用C库、流库、字符串库、STL容器或STL算法的某些部分,它可以作为一个很好的起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接