string "reinigen"??



  • 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 fehler 😕 😕

    int 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! 😃



  • chille07 schrieb:

    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! 😃

    Das ist wahr, aber auch wenn du free benutzt, ist der Speicher da, du kannst auf den zeiger nicht mehr zugreifen/arbeiten, aber die einzelne Bits sind meistens gesetzt. Das Löschen habe ich hier so verstanden, als hätte man ein String und beim Löschen sind alle Zeichen weg, wie in VB, a="" ist das "Löschen" vom String a.



  • Ich glaube nicht, dass es in VB recht viel anders ist als in C(++). Du kannst hald nicht mehr auf die Zeichen direkt zugreifen.


Anmelden zum Antworten