繁体   English   中英

这段代码中std :: remove_if有什么问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM