std::string aus 2 mach 1

jkallup

Erfahrenes Mitglied
Hsllo

ich habe einen std:string = "Hallo foo";
wie kann ich nun zwischen Hallo und foo eine "boo" einsetzen?
das Problem ist, das der erste String variabel groß sein kann.
 
Hallo sheel,

danke für Deine Antwort.
Ich erkenne nix.
ist halt ein string, der verschiedne Zeichen beinhalten kann.
wenn ich nun sage "führe verbindung aus", dann soll der Teil, der hinter dem cursor liegt angefügt werden.

Also:

std:string buffer[0] = "ssdf dsfdf kk\n"; // <--- hier anfügen
std:string buffer[1] ? "2345\n";

und dann soll der buffer geändert werden, da sich ja einen Zeilenverschiebnung ergeben hat-
 
Ansonsten: Ich verstehe dich nicht. Könntest du ein konkretes Beispiel (mit gewünschtem Ergebnis) machen?
Und "hier" ist nicht sonderlich präzise.

Gruss
cwriter


mit Cursor meinte ich die Position des TextCursors in einen Editor - siehw Posting: http://www.tutorials.de/c-c/396963-ncurses-c-und-editor-basteln.html#post2050063

das eigentliche entfermnen geht ja prima über erase.
aber wenn am ende dann ein '\n' auftaucht in der Zeile 1 nach oben

Also:

Zeile
1: Textzeile1 \n
2: Zeile 2\n

dann müste zuerst die Position des xpos Cursors er,mittelt werden, so dass xpos nicht ganz hinten beginnt und die Zeile 2 an Zeile 1 anfügt.
Dann häzze man ja immernoch das '\n' im Text
und somit wird dann unter umständen die 1. zeile wieder mit '\n' angezigt.

Beispiel:

1: Textzeile\n Zeile2\n


Was also passieren soll:

1: Textzeile Zeile2\n

am besten kann man das in der Linux console sehen, wenn man das Programm (link oben) compiliert und ausführt-
 
Nun, wenn das so ist: Du willst ja eigentlich nur das "\n" löschen.
C:
buf1.substr(0, buf1.length()-1-1); //Der string ohne das "\n". Bei der Konstante -1 -1 bin ich mir nicht sicher. Ist alles aus dem Kopf. Vielleicht ist es auch nur -1.

Also als Beispiel dann:
C:
std::string gesamt = buf1.substr(0,buf1.length()-2) + buf2; //buf2 == std::string

Gruss
cwriter
 
Zuletzt bearbeitet:
Danke Dir******
ich habe echt nen durchhänger.
könntest Du mir ein Beispiel zeigen, das auf den Editor passt,
also dass wenn ich Backspace drücke, und der Cursor am Zeilenanfang steht,
zum Zeilen Ende der vorhergehende zeile springt und die Zeile dadrünter löscht?

die ausgangsbasis ist ja ein vector buffer vom typ ,string.

Danke schonmal
 
Nunja, der Cursor wird bei dir wohl xpos sein (der interessante).
Dann einfach
C:
if(xpos == 0 && Backspace_gedrückt) //Habe ich nicht überprüft, einfach der kleinstmögliche Wert (am Anfang der Zeile)
{
    buffer[ypos-1] = buffer[ypos-1].substr(0,buffer[ypos-1].length()-2) + buffer[ypos];  //Hier bin ich zu faul, den Code zu lesen. ypos -1 ist einfach die Zeile eins höher.
    //Beim Vektor den Eintrag von buffer[ypos] löschen und gut ist.
    //Dann den Cursor noch ans Ende der Zeile setzen
    ypos--;
    xpos = buffer[ypos].length();
}

Gruss
cwriter
 

Neue Beiträge

Zurück