string "reinigen"??



  • @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