string "reinigen"??
-
guten morgen!!
ich hätte gerne gewusst ob es eine möglichkeit gibt teile aus einem string rauszulöchen??danke schon mal
mfg saroll
-
ja klar gibt es die was genau willst du machen...
einfachste möglichkeit ist meistens die teile die du haben willst in nen anderen string kopieren...
sonst musst du den speicher innerhalb des strings verschieben (memmove)...
-
ich will ein zeichen das am anfang des strings ist rauslöschen
und dann muss der index aber wieder bei 0(??) anfangen...
dann muss das nächste dieser zeichen gesucht werden
und die zeichen dazwischen in einen anderen string reingetan werden...danke mfg saroll
-
willst du auf einem C-String arbeiten (char
oder auf einem Objekt der C++-Klasse string ?? Willst du die Einzelteile alle in verschiedene neue strings speichern oder willst du in dem Original nur bestimmte Zeichen rausschmeißen?? Wahrscheinlich zweiteres, oder? Willst du nach einzelnen Zeichen suchen und diese rausschmeißen oder nach substrings (bestimmte Zeichenfolgen)?
Es wäre übrigens eine gute Übung sich so eine Funktion selber zu schreiben
-
ich muss mit c-string arbeiten
ich will aus dem original teile rausschmeißen
ich will abwechselnt 1 zeichen und dann wieder einen string...
alle fragen beantwortet??
*gg*
dann fang ich mal an mit meiner funktion *gg*mfg saroll
-
versuch es und zeig uns dann mal deine Lösung! Klappt schon
-
Saroll schrieb:
ich muss mit c-string arbeiten
ich will aus dem original teile rausschmeißen
ich will abwechselnt 1 zeichen und dann wieder einen string...
alle fragen beantwortet??
*gg*
dann fang ich mal an mit meiner funktion *gg*mfg saroll
HAst du char*, char[xxx] oder mit malloc initialisiert?
Ein c-string zu löschen kann man nicht im wahren Sinne des Wortes. Was du machen kannst ist an der ersten Stelle das \0 Bit setzten.char x[] = "Hallo, Welt"; printf("%s\n",x); /* x "löschen" */ *x=0; /* äquivalent zu x[0]=0 oder x[0]='\0' */ printf("%s\n"); printf("end\n");
Ausgabe
Hallo, Welt end
-
huhu
hab mal eben die funktionen gemacht...
schaut sie euch an und sagt mir ob sie zu kompliziert sind und ob sie falsch sind, der compiler gibt keine meldung aus aber vielleicht andere fehlerint Umschreiben(char *Alles, char *Text1, int wo) {int laenge=strlen(Alles),i=0; char *Temp; do {Text1[i]=Alles[i]; i++; }while(i+1==wo); i=0; do {Temp[i]=Alles[wo+i]; i++; }while(wo+i==laenge); Alles=Temp; return (*Alles,*Text1); } int Loeschen(char *Alles) {int laenge=strlen(Alles), i=0; char *Temp; do {Temp[i]=Alles[i+1]; i++; }while(i==laenge); Alles=Temp; }
danke
-
was willst du denn überhaupt für Zeichen finden und rausschmeißen?
-
kennst du .lis files??
da is der code immer so:*p2863X*p530Y(s1P(s16602T(s10V(s0BKundennummer: 44001
und die escape-sequenzen will ich filtern damit ich die befehle dazwischen raussammeln kann
sind da meine funktionen geeignet??
-
ich glaube, daß ich nicht mehr ganz mitkomme, aber:
warum hat deine Fkt Umschreiben als Rw int, aber du gibst *Alles,*Text1 zurück?? Loeschen soll int zurückgeben, aber gibt nix zurück.
wie sehen denn die escape-sequenzen bei den .lis aus? sind das die Kästchen mit dem Buchstaben davor (Bsp.: X )?? Was stellen diese Zeichen denn im Ascii-Code dar?
-
@Saroll
Also ich bezweifle, dass dieser Code das macht, was du vor hast.In C(++) gibt es übrigens keine abbruchbedingten Schleifen, d. h. du musst die Bedingung deiner Schleifen umstellen. Also nicht denken "Solange bis die Bedingung erfüllt ist" sondern "Solange die Bedingung erfüllt ist". Solange also deine Bedingung in der Schleife Wahr ergibt, wird die Schleife ausgeführt, sobald sie Falsch ergibt, wird sie abgebrochen. Außerdem solltest du in dem Fall keine endbedingten Schleifen anwenden, schließlich könnte es Fälle geben, bei denen es nicht richtig ist, dass der Inhalt ausgeführt wird. Ein konkretes Beispiel wäre, dass du für wo 0 übergibst. Wenn die Bedingung deiner Schleife richtig wäre, würdest du eine Endlosschleife produzieren.
Das return in deiner ersten Funktion kannst du dir sparen. Außerdem wäre es auch nicht korrekt (wundert mich, dass das der Compiler ohne Murren annimmt
).
Die Zuweisung von Temp auf Alles bringt auch nichts.
So nun direkt zu deinen Funktionen:
Loeschen() kannst du direkt durch strcpy(ziel, quelle) (ziel kann auch quelle sein ;)) ersetzen.Umschreiben() kannst du viel einfacher realisieren. (Mir fällt grad auf, dass da auch noch ein Fehler drin ist. Du hast das Stringendezeichen ('\0') vergessen bei Text1)
Den ersten Teil holst du dir einfach durch strncpy()strncpy(Text1, Alles, wo); Text1[wo] = 0; //Stringendezeichen setzen!
und das "Nachrücken" im String machst du einfach wieder mit strcpy()
strcpy(Alles, Alles+wo);
Zu beachten ist, dass bei strcpy() das Stringendezeichen mitkopiert wird. Bei strncpy() wird es nur mitkopiert, wenn der zu kopierende String kleiner ist als die maximale Länge.
Mehr Infos zu den Funktionen findest du hier: http://www.cplusplus.com/ref/indexr.html
-
also das mit den schleifen, da hätt ich auch selber draufkommen können *sich selbst hau*
aber das mit dem strcpy und so, *schulterzuck* ich mach heute das erste mal was in c
ich brauche aber den teil vor dem wo... nicht danach...
gibt es im net irgendwo nen gratis compiler für c??
wäre schon recht praktisch *gg*danke mfg saroll
-
-
Saroll schrieb:
ich brauche aber den teil vor dem wo... nicht danach...
Wird doch so gemacht
gibt es im net irgendwo nen gratis compiler für c??
wäre schon recht praktisch *gg*danke mfg saroll
Schau mal auf www.c-plusplus.net
PS: hat ja linker schon gepostet
-
wenn du nur ein paar sachen rausfiltern willst kannst du auch strtok rüberjagen und die teilstrings die strtok liefert zu einem neuen zusammenklatschen...
-
ich müsste sie ja noch ersetzen geht das denn mit dem strtoc??
kannst du mir das ein bisschen näher erklären??
-
int main(){ char str[]="LINUX SUCKS!!!!LINUX SUCKS!!!LINUX SUCKS....LINUX SUCKS&&&"; char str2[1024]; char seps[] = "&.! ,\t\n"; char *token; *str2=0; printf( "%s\n",str); strcat(str2,token = strtok( str, seps )); while( token = strtok( NULL, seps )) strcat(str2,token); printf("%s\n", str2); }
-
Windalf schrieb:
char str[]="LINUX SUCKS!!!!LINUX SUCKS!!!LINUX SUCKS....LINUX SUCKS&&&";
hey du hast da etwas verwechselt. es heißt WINDOWS SUCKS
Pablo
-
supertux schrieb:
Ein c-string zu löschen kann man nicht im wahren Sinne des Wortes.
Einspruch euer Ehren! :p
Wenn du den Array mit malloc erzeugt hast, kannst du ihn auch wieder mit free freigeben!
Der Speicherplatz ist wieder frei, und der String praktisch gelöscht.
Danke für Ihre Aufmerksamkeit!