Stringinhalt in neuen String einfügen



  • Hallo Leute,
    habe grad ein kleines Problemchen.
    Ich habe z.B. den String ab und der Inhalt ist "007".
    Nun möchte ich, dass der Inhalt des Strings gelesen wird,
    die 0 durch 1 ersetzt wird und die 7 durch 8 und dann in einen
    neuen String bc gepackt wird.

    string ab, bc;
    getline(cin, ab)
    for (int i = 0 ~~ und weiter?!){
    if (ab[i]=='0')strcat(bc,"1");
    if (ab[i]=='7')strcat(bc,"8");
    }
    

    Warum geht das nicht? 😛



  • if (ab[0] == '0') ab[0] = '1';
    

    Ist eventuell einfacher. 😉

    strcat ist eine C-Funktion für char-Arrays, nicht für std:string.



  • strcat() funktioniert nur mit C-Strings (nullterminierte char-Arrays), für C++ Strings (std::string) kannst du stattdessen push_back(), append() oder auch += verwenden. (zur Not auch insert())



  • Fellhuhn schrieb:

    if (ab[0] == '0') ab[0] = '1';
    

    Ist eventuell einfacher. 😉

    strcat ist eine C-Funktion für char-Arrays, nicht für std:string.

    Ja aber so wird das doch nur in ab geändert und nicht in bc geändert.

    if (ab[0]=='0')insert(bc,"1");
    

    Des funktioniert auch nicht 😞

    Und des ab[i] ist ja mit i dazu gedacht das man nicht manuel 0 1 2 etc eintragen muss



  • Ah, okay, du liest einen String ein, willst den aber nicht verändern, sondern eine Kopie davon. Okay.

    string ab, bc;
    getline(cin, ab)
    
    bc = ab;
    for (int i = 0 ~~ und weiter?!){
      if (bc[i]=='0') bc[i] = '1';
      if (bc[i]=='7') bc[i] = '8';
    }
    


  • Nein, nicht Kopie 😛
    In String ab steht jetzt z.B. 007.
    Nun will ich das dies umgewandelt wird, also für ne 0 eine 1 und für eine 7 eine 8 und dabei in String bc gepackt wird, damit dann in String bc letzenendes 118 steht.
    Hoffe sie verstehen was ich meine.



  • Also im Endeffekt sollen beide verändert sein?

    string ab, bc;
    getline(cin, ab)
    
    for (int i = 0 ~~ und weiter?!){
      if (ab[i]=='0') ab[i] = '1';
      if (ab[i]=='7') ab[i] = '8';
    }
    bc = ab;
    


  • zeichen-weise vorgehen

    solange string laenge:
    -zeichen holen []
    -zeichen nach int
    -int inkrementieren
    -int nach zeichen
    -zeichen schreiben []



  • Fellhuhn schrieb:

    Also im Endeffekt sollen beide verändert sein?

    string ab, bc;
    getline(cin, ab)
    
    for (int i = 0 ~~ und weiter?!){
      if (ab[i]=='0') ab[i] = '1';
      if (ab[i]=='7') ab[i] = '8';
    }
    bc = ab;
    
    if (ab[i]=='0')insert(bc,"1");
    

    Also: Wenn in ab '0' ist dann füge dies in den string bc als '1' ein.
    Nur if (eingabe[i]=='b')strcat(Buffer,"n"); funktioniert wie gesagt nicht.



  • Wie bereits gesagt - strcat() funktioniert nicht für C++-Strings (aus gutem Grund). Die bessere Lösung ist:

    if(eingabe[i]=='b')
      Buffer+="n";
    /* oder:
      Buffer.append("n");
      Buffer.push_pack('n');
      Buffer.insert(Buffer.size(),"n");
      ...
    */
    


  • Ok danke für die "Lösung"!



  • Was hast du? Die angegebenen Funktionen liefern auf C++ Strings das selbe Ergebnis wie deine strcat()-Lösung auf C Strings. Wenn du damit ein Problem hast, formuliere deine Anforderungen genauer.


Log in to reply