2016-05-27 10 views
3

Ich versuche, einige Zeichen von einer Zeichenfolge an eine andere anhängen, aber ich konnte es nicht tun. Ich habe versucht, etwas wie folgt:push_back ein Zeichen von einer Zeichenfolge in eine andere Zeichenfolge

std::string fooz = "fooz"; 
std::string foo; 
int i = 0; 
while(i< fooz.length()){ 
    if(fooz[i] != 'z'){ 
     foo.push_back(fooz[i]); 
    } 
    i++; 
} 

foo nach der Weile ist leer.

+1

Ihre Schleife kann in 'std :: copy_if' vereinfacht werden. – chris

+0

Typo. Sollte 'while (i where23

Antwort

4

Sie nehmen Länge von der Zielzeichenfolge, die noch leer ist und die while-Schleife wird überhaupt nicht ausgeführt.

ändern

while(i< foo.length()){ 

zu

while(i< fooz.length()){ 
+0

Ich war im Begriff, dasselbe zu sagen. –

+0

Ich weiß, da ist ein Problem, aber foo immer noch leer nach der Weile, das ist mein Problem –

+0

@IgnacioTarrio Ich habe versucht, eine Demo [hier] (http://rextester.com/CJRX67493), sollte es gut funktionieren. Ist es Ihr einziger Code? Es könnte auch andere Probleme geben. – songyuanyao

-1
std::string fooz = "fooz"; 
std::string foo; 
int i = 0; 
int len=fooz.size(); 
while(i< len){ 
    if(fooz[i] != 'z'){ 
     foo.push_back(fooz[i]); 
    } 
    i++; 
} 

Don nicht std :: string.size() oder length() in while-Schleife aufzurufen.

+0

Warum? ........... –

+0

Die Antwort des Autors ist in diesem Fall falsch. Es ist in der Regel eine schlechte Übung, es auf etwas zu beziehen, das sich ändert (das kann man nicht mit Iteratoren machen, ohne dass zum Beispiel "schlechtes Zeug" passiert), aber hier spielt es keine Rolle. Wenn der Compiler "wirklich damit" ist, wird es den wiederholten Aufruf der Methode optimieren und es genauso effizient machen wie hier. –

0

Die STL kann Ihnen in dieser Art von Szenarien helfen.

Dieser verwendet den remove Algorithmus, der eine Reihe von Elementen zum Löschen bietet.

#include <string> 
#include <iostream> 
#include <algorithm> 

int main() 
{ 
    std::string str("aaazbbb"); 

    std::cout << str << std::endl; 

    str.erase(std::remove(str.begin(), str.end(), 'z'), str.end()); 

    std::cout << str << std::endl; 
} 
Verwandte Themen