[英]what's wrong with std::remove_if in this code
solution.cc:14:47:错误:没有匹配的函数可调用'remove_if(std :: basic_string :: iterator,std :: basic_string :: iterator,)'
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
string s;
std::getline(cin, s);
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
std::remove_if(s.begin(), s.end(), isspace);
// cout<<s;
int len=s.length();
len=len+90;
bool temp;
bool value[len];
for(int i=0;i<len;i++)
{
int x=(int)s[i];
if(value[x]!=1) value[x]=1;
}
for(int i=65;i<=90;i++)
if(value[i]==1) {temp=true;continue;}
else {temp=false;break;}
if(temp) cout<<"pangram"<<endl;
else cout<<"not pangram"<<endl;
return 0;
}
我尝试在g++ 4.9.1
编译您的代码。 确切的错误是:
在函数
int main()
:错误:没有匹配的函数可调用'remove_if(std :: basic_string :: iterator,std :: basic_string :: iterator,未解析的重载函数类型)'
调用std::transform
并不会发生这种情况,因为您实际上指定了要使用的tolower
。
isspace
是在全局命名空间和命名空间std
,因此,当您using namespace std
并编写isspace
,会有歧义。 具体来说,在<cctype>
有一个重载,在<locale>
有另一个重载。
只需编写::isspace
,您就很好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.