从列表中删除大写字母并将其写入另一个列表

时间:2016-05-17 20:32:20

标签: c++ list lambda erase

我必须创建一个字符串列表并删除带有lambda的大写字母并将其写入另一个列表,所以我尝试但我有错误:[Error] request for member 'erase' in 'c', which is of non-class type 'const char'

list<string> ls {"hak","ala","alA","coS","KtOs"};
list<string> ls2;
for(auto k : ls)cout<<k<<endl<<endl;
transform(ls.begin(),ls.end(),ls.begin(),[](string &s) {    
             transform(s.begin(),s.end(),s.begin(), [](const char& c) { 
                  if(isupper(c) );return c.erase(isupper(c)) ; 
               });
          return s;

1 个答案:

答案 0 :(得分:1)

你的这个lambda:

[](const char& c) { 
     if(isupper(c) );
          return c.erase(isupper(c)) ; 
}

;中有一个if ...有效地将其转换为死代码... c的类型为char,它没有成员。你甚至试图做什么? isupper返回非零值(表示可能是任何内容)以表示true

我认为你想要做的是:

transform(ls.begin(), ls.end(), back_inserter(ls2),
            [](string s) -> string
            {
                s.erase(remove_if(s.begin(), s.end(),
                           [](char c){
                                  return isupper(c);
                           }), s.end()
                       );
                    return s;
             });

同样,我使用back_inserter作为新列表,因为它假设它还没有包含任何元素。另一个是Constructed Table。请参阅Remove/Erase Idiom的文档。

此处的完整示例:isupper

相关问题