2016-05-17 1 views
-2

ich eine Stringliste erstellen muß und obere Buchstaben mit Lambda entfernen und in einer anderen Liste schreiben, so dass ich versuchen, aber ich habe Fehler: [Error] request for member 'erase' in 'c', which is of non-class type 'const char'obere Buchstaben aus der Liste entfernen und in einer anderen Liste schreibt

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; 
+3

Wenn Sie einige * Fehler * haben müssen Sie einige * * Fixes anzuwenden. – SergeyA

+0

Ich habe einen Fehler: [Error] Anfrage für Mitglied 'löschen' in 'c', die von Nicht-Klasse ist Typ 'const char' – grapexs

Antwort

1

Diesen Lambda von Ihnen:

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

Sie haben eine ; in Ihrem if ... effektiv es zu einem toten Code übersetzen ... Und c sind vom Typ char, hat es keinen m Glut. Was versuchst du überhaupt? isupper gibt einen Wert ungleich Null zurück (was bedeutet, dass alles möglich ist), um true zu bezeichnen.

Ich nehme an, was Sie wollen zu tun ist:

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; 
      }); 

Auch hier habe ich back_inserter für die neue Liste, weil sie angenommen es kein Element noch nicht enthält. Die andere ist Remove/Erase Idiom. Und bitte beachten Sie die Dokumentation von isupper.

Voll Beispiel hier: http://coliru.stacked-crooked.com/a/4df3c806d7d35de4

+0

Danke, Sie sind sehr hilfreich. – grapexs

Verwandte Themen