Probleme mit String



  • Hallo!

    Im Prinzip habe ich folgendes:
    string eingabe;
    Übernimmt eine Usereingabe über das Netzwerk (per Socket).
    string back = " Autor: xyz";

    eingabe = eingabe + back;
    

    Wenn ich das jedoch ausgebe bekomme ich folgendes:

    Hier steht die Usereingabe, die der User über die Sockets gesendet hat.
    Autor: xyz

    Was ich will wäre jedoch:

    Hier steht die Usereingabe, die der User über die Sockets gesendet hat. Autor: xyz

    Also, alles in einer Zeile, die eingabe Variable scheint aber an letzter Stelle einen Zeilenumbruch zu bekommen, die Frage ist nun wie ich den webekomme?

    LG



  • Um die Eingabe des Strings abzuschließen tut der User was?
    Genau er drückt Enter -> Enter == '\n' == Zeilenumbruch.
    Lösch also einfach das letzte Zeichen von Eingabe,
    da fällt mir auf die schnelle nix besseres ein
    als eingabe.erase(eingabe.end()-1),
    und mache danach eingabe += back;

    Hat im übrigen nix mit Linux zu tun.



  • "Aborted (core dumped)"

    in der Zeile mit dem eingabe.erase(eingabe.end()-1)
    ...



  • Versuch doch das letzte Zeichen mit getchar(); abzufangen

    mfg kaffee



  • int getchar ( void );

    Get character from stdin

    Returns the next character from the standard input (stdin).
    It is equivalent to getc with stdin as its argument.

    Wie soll mir das helfen? :S



  • Um das '\n' abzufangen

    mfg kaffee



  • aber ich habe einen string:
    string eingabe = "text\n"
    der sieht in dem fall so aus.

    wie kann ich mit getchar() das \n abfragen?
    ist es dann nicht besser mit string replace / find zu arbeiten?

    lg



  • hab das jetzt so versucht zu lösen:

    eingabe.replace(eingabe.find("\n"), "2", " ");
    -> Gibt mir aber ein Fehler:
    -> what(): Exeception out of Range

    ?



  • doppel schrieb:

    hab das jetzt so versucht zu lösen:

    eingabe.replace(eingabe.find("\n"), "2", " ");
    -> Gibt mir aber ein Fehler:
    -> what(): Exeception out of Range

    ?

    Warum ist denn die Zwei in Anführungszeichen? Und Warum willst du zwei Zeichen ersetzen. "\n" ist nur ein Byte.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main () {
        string eingabe = "Hallo\nIch bin da";
        cout<<eingabe<<endl;
    
        size_t pos = eingabe.find("\n");
        eingabe.replace(pos, 1, " ");
    
        cout<<eingabe<<endl;
    
        // Vorschlag von Storm.Xapek.de
        eingabe.erase( --eingabe.end());
        cout<<eingabe<<endl;
    
        return 0;
    }
    

    Wenn das "\n" immer am Ende steht, dann nimm lieber die methode von Storm.Xapek.de, weil weniger Rechenaufwand.


Anmelden zum Antworten