我正在尝试从字符串中删除空格。但是错了。
我的代码做错了哪个参数..感谢您的回复
我的主要功能
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string myText;
myText = readText("file.txt");
myText.erase(remove_if(myText.begin(), myText.end(), isspace), myText.end());
cout << myText << endl;
return 0;
}
下面是我尝试编译时出现的错误。
encrypt.cpp: In function ‘int main()’:
encrypt.cpp:70:70: error: no matching function for call to ‘remove_if(std::basic_string<char>::iterator, std::basic_string<char>::iterator, <unresolved overloaded function type>)’
encrypt.cpp:70:70: note: candidate is:
/usr/include/c++/4.6/bits/stl_algo.h:1131:5: note: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)
答案 0 :(得分:3)
您收到此错误,因为有两个名为isspace
的函数。
在locale
标头中定义,命名空间标准:
template<class charT>
bool std::isspace(charT ch, const locale& loc);
在cctype
标头中定义,全局命名空间:
int isspace( int ch );
所以,如果你想使用第二个功能,你有两种方法:
using namespace std
。我更喜欢它。使用::
调用全局命名空间中定义的函数
remove_if(myText.begin(), myText.end(), ::isspace)
// ^^
答案 1 :(得分:0)
有几个详细的解释:
No instance of function template remove_if matches argument list
总之,isspace对编译器来说是不明显的。我宁愿命令不使用它。
以下代码适用于G ++ 4.7.2
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool isSpace(const char& c)
{
return !!::isspace(c);
}
int main()
{
string text("aaa bbb ccc");
text.erase(remove_if(text.begin(), text.end(), isSpace), text.end());
cout << text << endl;
return 0;
}