Leerzeichen im C-String entfernen | Die ersten und die letzten.
-
Moin, freunde der komplexen Denkweisen :D,
Vor folgendem Problem stehe ich dar.
Ich deklarier und initialisiere einconst char *a=" Die ist mein Baumhaus ";
Die Leerzeichen am Anfang und am ende sollen weg!!
Bedingung ist , keine Indizes zu benutzen.
ich habe das mal wie folgt gemacht aber der nimmt alle Leerzeichen raus weil ich kein passenden Algorithmus dazu mir ausdenken kann
const char* text=" Die ist mein Baumhaus "; char* b=new char[30]; int counter=1; while(*text){ *b=*text; if(*b!=' '){ cout << b <<endl; text++; b++; counter++; }else{ text++; *b=*text; break; } } *b='\0';
Ich weiß das die break;-Anweisung irgendwie falsch ist ...
Ich krieg einfach den Bogen nicht raus.
Würde mich herzlichst über einpaar Hilfen freuen
Liebe Grüße
Syko1
-
Syko1 schrieb:
Bedingung ist , keine Indizes zu benutzen.
Weil?
Syko1 schrieb:
aber der nimmt alle Leerzeichen raus weil ich kein passenden Algorithmus dazu mir ausdenken kann
Wie wäre es mit solange Leerzeichen entfernen bis irgendein anderes Zeichen kommt, dann zu Ende des Strings gehen und dann wieder solange den String rückwärts abbarbeiten wie man Leerzeichen hat?
-
Du mußt einmal von vorne und dann von hinten her die Leerzeichen entfernen (TrimLeft, TrimRight).
-
danke für die Antworten.
Weil?
Weil ich es sage
Ist halt die Aufgabenstellung.Wie wäre es mit solange Leerzeichen entfernen bis irgendein anderes Zeichen kommt, dann zu Ende des Strings gehen und dann wieder solange den String rückwärts abbarbeiten wie man Leerzeichen hat?
Bin ja auch draufgekommen doch wie umsetzten !?
Und was meinst du mit entfernen ?
was ich höchsten machen kann ist doch den Zeiger auf das nächste Element setzen.while(*text==' '){ text++; }
vlt. ein Beispiel
-
Quick and Dirty ein Beispiel:
#include <stdio.h> int main() { char str[] = " Die ist mein Baumhaus "; char *ptr1 = str; char *ptr2 = str; while (*ptr2) { if (*ptr1 == ' ') ++ptr1; ++ptr2; } --ptr2; while (*ptr2 == ' ') { *ptr2 = '\0'; --ptr2; } printf("%s", ptr1); }
Das ist aber kein C++! Denn damit ginge das viel eleganter. Ebenfalls Quick and Dirty:
#include <string> #include <iostream> int main() { std::string str = " Die ist mein Baumhaus "; std::size_t pos; if ((pos = str.find_last_not_of(" ")) != std::string::npos) str = str.substr(0, pos + 1); if ((pos = str.find_first_not_of(" ")) != std::string::npos) str = str.substr(pos); std::cout << str; }
-
Genau, wenn du den original String nicht verändern willst überspringst du erstmal alle Leerzeichen bevor du anfängst die Zeichen in den neuen String zu kopieren. Beim Entfernen der Leerzeichen am Ende gibt es wie ich es sehe zwei Möglichkeiten. Entweder du kopierst erstmal den kompletten restlichen String und entfernst anschließend die Leerzeichen am Ende wieder (durch setzen der Null Terminierung). Oder bevor du anfängst Zeichen zu kopieren schaust du schonmal wie viele Zeichen noch kommen und wie viele davon Leerzeichen am Ende sind und kopierst dann nur den Teil vor den Leerzeichen.
-
Noch ein etwas anderer Ansatz. Ebenfalls Quick and Dirty:
#include <stdio.h> int main() { char str[] = " Die ist mein Baumhaus "; char *ptr1 = str; char *ptr2 = str; char *lastPtr = ptr2; while (*ptr2) { if (*ptr1 == ' ') ++ptr1; if (*ptr2 != ' ') lastPtr = ptr2; ++ptr2; } ++lastPtr; *lastPtr = 0; printf("%s", ptr1); }
-
super.. jetzt hab ich es gecheckt..
Vielen danke