String verknüpfen, Array, Zeiger??

  • Hier erstmal ein Code-Ausschnitt (c++):

    char tmp[80];
    string test;
    cin.getline(tmp, 80);

    test=tmp[1]+tmp[2];
    cout<<test;

    Wenn z.B. Hallo eingegeben wird, will ich das auf der Konsole “ al ” ausgegeben wird.
    Momentan werden mir nur Zeichen ausgegeben. Ich denke, man muss das hier irgendwie mit Zeigern lösen, oder? Ich komme aber leider nicht auf den richtigen Lösungsweg... Fände es super, wenn mir jmd weiter helfen könnte :wink:

  • Tja, das liegt schlicht und ergreifend daran, dass hier keine "String-zusammenfüg-Funktion" aufgerufen wird, sondern der ASCII Wert von a (97) und l (108) addiert wird.

    Warum nutzt du für tmp eigentlich keinen std::string, wäre einfacher. Für std::string gibt es nämlich einen + Operator der genau das macht was du willst.

    Wenn du mit c-strings arbeiten willst, dann musst du auf strcpy() zurückgreifen. Aber das würde ich nicht empfehlen...

  • Hm, es reicht aber sicher nicht aus, wenn ich einfach nur std::string vor tmp setze, oder? Jetzt gibt es Problem beim einlesen (also bei getline...) :(

  • Dass heißt es müsste dann so aussehen:

    std::string tmp[80];
    string test;
    getline(cin, tmp);

    test=tmp[1]+tmp[2];
    cout<<test;

    Dies läuft leider immer noch nicht, benötige ich hier noch eine weitere Bibliothek außer <string> ?
    Sorry, wenn ich mich grad ein bisschen blöd anstelle, komme aber grad echt nicht drauf -> Danke für deine Hilfe!!

  • Das Problem ist, dass string::operator[] eine Referenz auf ein char zurück gibt. Der + Operator aber mindestens einen String haben will.

    So würde es aber beispielsweise gehen:

    Code
    string tmp1, tmp2;
    getline(cin, tmp1);
    
    
    if(tmp1.length() > 2)
    {
       tmp2 = string(1, tmp1[1]) + tmp1[2];
       cout << tmp2 << endl;
    }

    In der If-Anweisung lässt du dir temporär einen String erstellen mit dem der + Operator arbeiten kann.