从列表中删除大写字母并将其写入另一个列表
remove upper letters from list and write it into another list
我必须创建一个字符串列表并用 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;
你的这个 lambda:
[](const char& c) {
if(isupper(c) );
return c.erase(isupper(c)) ;
}
您的 if
中有一个 ;
...有效地将其转换为无效代码...
而 c
是 char
类型,它没有成员。你到底想做什么? isupper
returns 一个非零值(意味着它可以是任何值)来表示 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
,因为它假定它还不包含任何元素。另一个是Remove/Erase Idiom. And please see the documentation of isupper
.
完整示例在这里:http://coliru.stacked-crooked.com/a/4df3c806d7d35de4
我必须创建一个字符串列表并用 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;
你的这个 lambda:
[](const char& c) {
if(isupper(c) );
return c.erase(isupper(c)) ;
}
您的 if
中有一个 ;
...有效地将其转换为无效代码...
而 c
是 char
类型,它没有成员。你到底想做什么? isupper
returns 一个非零值(意味着它可以是任何值)来表示 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
,因为它假定它还不包含任何元素。另一个是Remove/Erase Idiom. And please see the documentation of isupper
.
完整示例在这里:http://coliru.stacked-crooked.com/a/4df3c806d7d35de4