"Stringinhalt" verschieben
-
Hi!
Welches ist die einfachste und schnellste Methode einen "Stringinhalt" um 1 Byte nach links zu verschieben?
char *hello;
strcpy(hello,"Hello World\n");"Hello World\n";
wird zu
"ello World\n";Das kann man doch bestimmt mit irgendeinem Operator machen, oder? Hab leider keine Ahnung davon...
Danke schon mal im voraus,...
Gruß,
Dago
-
Schau dir mal die Methode substr(...) an.
-
Mein Compiler (DevC++) kann mit substr nichts anfangen.
Kann man es nicht zum Beispiel so machen:hello << 1;
oder so ähnlich?
-
Ok, hab das Problem durch ein bisschen rumprobieren schon selbst gelöst:
char text[100] = "Hello World\n"; char *cmdline; cmdline = new char[strlen(text)+1]; strcpy(cmdline,text); cmdline++; cmdline[strlen(cmdline)-1] = '\0';
-
Dago schrieb:
Welches ist die einfachste und schnellste Methode einen "Stringinhalt" um 1 Byte nach links zu verschieben?
indem du den pointer nach 'rechts' verschiebst.
char *p="Hello, World!\n"; printf(p); ++p; printf(p);
wohl (mit) die schnellste version.
-
#include<cstring> strcpy(hello,hello+1);
aber meistens ist die Cpt.Tanga-lösung besser.
-
...geht rechtsschieben?
--> Aus "Hallo Welt" mach " Hallo Welt" ???
-
Würd mal spontan sagen (ohne getestet zu haben):
char text[100] = "Hello World\n"; char *cmdline; char lastletter; cmdline = new char[strlen(text)+1]; strcpy(cmdline,text); lastletter = text[strlen(text)-1]; cmdline--; cmdline[0] = ' '; text[strlen(text)] = lastletter; text[strlen(text)+1] = '\0';
-
mit strings gehts noch einfacher, nur einen teil der zeichenkette zu nehmen
string zeichenkette = "Hallo Welt\n"; cout << s.substr(1,s.size()); //allo Welt
mfg
-
Dago schrieb:
Würd mal spontan sagen (ohne getestet zu haben):
char text[100] = "Hello World\n"; char *cmdline; char lastletter; cmdline = new char[strlen(text)+1]; strcpy(cmdline,text); lastletter = text[strlen(text)-1]; cmdline--; cmdline[0] = ' '; text[strlen(text)] = lastletter; text[strlen(text)+1] = '\0';
Das geht nicht; über das dekrementierte cmdline greifst du auf Speicher zu, der dir nicht gehört. Außerdem kannst du den über new[] angeforderten Speicher so nicht löschen; du mußt dazu schon den Original-Zeiger beibehalten.
Dago schrieb:
Ok, hab das Problem durch ein bisschen rumprobieren schon selbst gelöst:
char text[100] = "Hello World\n"; char *cmdline; cmdline = new char[strlen(text)+1]; strcpy(cmdline,text); cmdline++; cmdline[strlen(cmdline)-1] = '\0';
Auch hier hast du das Freigeben des Speichers vergessen. Man sollte mit new/new[] angeforderten Speicher in jedem Fall wieder mittels delete/delete[] löschen, wozu der Zeiger beibehalten und nicht verändert werden sollte.
Moritz
-
Du solltest mal angeben ob du nun eine String klasse benutzen darfst oder nicht...
string welt = "Hallo Welt"; string test; // Hallo Welt cout << welt << endl; // Ein Zeichen abschneiden test = welt.substr(1, test.size()-1); cout << test << endl; // Ein Zeichen am Anfang anhängen test = ' ' + welt; cout << test << endl;
Wenn nicht einfach die C-Funktionen, sind auch net viel schwerer...
char * welt = "Hallo Welt"; char * test = NULL; // Hallo Welt cout << welt << endl; // Ein Zeichen abschneiden test = new char[strlen(welt)-1]; strcpy(test, welt+1); cout << test << endl; delete [] test; // Ein neues Zeichen (hier ist das erste Zeichen dann undefiniert) test = new char[strlen(welt)+1]; strcpy(test + 1, welt); cout << test << endl; delete [] test;