Удалить верхние буквы из списка и записать их в другой список

Я должен создать список строк и удалить верхние буквы с помощью лямбды и записать его в другой список, поэтому я пытаюсь, но у меня есть ошибка:[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 ответ

Решение

Это ваша лямбда:

[](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 для нового списка, потому что предполагается, что он еще не содержит никакого элемента. Другой - Удалить / Стереть Идиому. И, пожалуйста, смотрите документацию isupper,

Полный пример здесь: http://coliru.stacked-crooked.com/a/4df3c806d7d35de4

Другие вопросы по тегам