ß ersetzen durch "ss"



  • snboy2010 schrieb:

    while (pos)
    	{
    		strncpy(dest, src, pos - src);
    		dest += pos - src;
    		dest += sprintf(dest, "ss", old);
    }
    

    Nur Deppen benutzen strncpy.
    Was soll das sprintf hier bewirken?
    Genau - Schrott.

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    
    char *strreplace(char *out,const char *in,const char *old,const char *new); 
    
    int main(void){ 
        const char *in = "Das ist eine faß faß Beute.", *old = "ß", *new = "ss";
        char out[1000];
        puts(strreplace(out,in,old,new)); 
        return 0; 
    } 
    
    char *strreplace(char *out,const char *in,const char *old,const char *new){ 
    	strcpy(out,in);
        // Anfänger sollten immer for benutzen, while ist was für Profis 
        for(char *pos = strstr(out, old); pos!=NULL; pos = strstr(out, old)) 
        { 
            memmove(pos+strlen(new),pos+strlen(old),strlen(pos+strlen(old))+1); /* Restverschiebung */
            memcpy(pos,new,strlen(new));
        }
        return out;
    }
    

    http://ideone.com/vbApZD



  • covfefe schrieb:

    char *makeSS (char *in)
    {
        char *mem = malloc (strlen(in)+1);
    ...
    }
    
    int main()
    {
        char *out = makeSS ("Faß Faß faß faß");
        ...
    }
    

    Und was soll dieser Müll?


  • Mod

    Wutz schrieb:

    char *strreplace(char *out,const char *in,const char *old,const char *new){ 
    	strcpy(out,in);
        // Anfänger sollten immer for benutzen, while ist was für Profis 
        for(char *pos = strstr(out, old); pos!=NULL; pos = strstr(out, old)) 
        { 
            memmove(pos+strlen(new),pos+strlen(old),strlen(pos+strlen(old))+1); /* Restverschiebung */
            memcpy(pos,new,strlen(new));
        }
        return out;
    }
    

    Toll. Gleich dafür gesorgt, dass sich die Leute wieder schnellere Computer leisten müssen.
    Ist ja nur Anfängercode, algorithmische Komplexität ist egal und es werden sowieso blossß triviale Beispiele untersucht... 🙄



  • Camper, halt einfach die Klappe.



  • Wutz schrieb:

    covfefe schrieb:

    char *makeSS (char *in)
    {
        char *mem = malloc (strlen(in)+1);
    ...
    }
    
    int main()
    {
        char *out = makeSS ("Faß Faß faß faß");
        ...
    }
    

    Und was soll dieser Müll?

    Müll ist es weil du es verstümmelt hast, Kumpel.



  • Durchschaubarer Versuch, deinen offensichtlichen Unsinn auch noch detailliert zu erklären.


  • Mod

    Wutz schrieb:

    snboy2010 schrieb:

    while (pos)
    	{
    		strncpy(dest, src, pos - src);
    		dest += pos - src;
    		dest += sprintf(dest, "ss", old);
    }
    

    Nur Deppen benutzen strncpy.
    Was soll das sprintf hier bewirken?

    Ja klar, nur Deppen benutzen strncpy, aber herauszufinden, was der Author mit dem sprintf beabsichtigt haben könnte, ist nat. für selbst für hochintelligente Personen nicht herauszufinden, folglich kann auch keine hilfreicher Kommentar abgegeben werden...



  • Wutz schrieb:

    Durchschaubarer Versuch, deinen offensichtlichen Unsinn auch noch detailliert zu erklären.

    Ein gestörter Pöbler wie du kann offensichtlich gar nichts erklären.



  • snboy2010 schrieb:

    AAAAAAAAA, maaaaaaan. Dieses scheiß Zeug. Warum mache ich das überhaupt!!!!!!!!!!!!!!!!! Keine Ahnung. Ist jedes mal anders. Kapiere es einfach nicht. Warum muss es immer so kompliziert seien.

    Dein Gejammer nervt einfach nur noch.

    snboy2010 schrieb:

    Bitte könnte mir jemand diesen Code korrigieren?

    Kannst du wirklich GAR nix selbst?! Eine Klausur die DU bestehst, besteht auch Lukas Podolski...



  • Wutz, such dir ein anderes Hobby, denn professionell C programmieren kannst du anscheinend nicht.
    Und deine Kommentare kannst du dir (und uns) bitte ersparen!



  • Th69, du hast keine Ahnung wovon du redest.
    Spreche nur über Dinge, von denen du Ahnung hast - also halte deine Klappe.



  • Oh, toll, ein Flamewar. Da mache ich auch mal mit. Bin ja so aufgeregt...
    Ach ne, besser doch nicht.



  • DocShoe schrieb:

    Oh, toll, ein Flamewar. Da mache ich auch mal mit. Bin ja so aufgeregt...
    Ach ne, besser doch nicht.

    Ist auch nicht interessant. Nur ein Spinner ohne Verstand und mit Langeweile, der alle anmacht. Gibt es hier eine Blockierfunktion für solche Trolle?


  • Mod

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.



  • camper schrieb:

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.

    Nur noch eins: Falls der OP meine Methode in Betracht zieht und einen Zeichensatz verwendet, in dem das 'ß' in ein einzelnes char passt, sollte die Speicherreservierung mindestes 2*strlen(inputstring) sein, weil für jedes ß zu ss ein Byte mehr benötigt wird.


  • Mod

    covfefe schrieb:

    camper schrieb:

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.

    Nur noch eins: Falls der OP meine Methode in Betracht zieht und einen Zeichensatz verwendet, in dem das 'ß' in ein einzelnes char passt, sollte die Speicherreservierung mindestes 2*strlen(inputstring) sein, weil für jedes ß zu ss ein Byte mehr benötigt wird.

    Das Grundproblem mit deinem Vorschlag ist ja wohl, dass es ein anderes Problem als das des OP zu lösen versucht. Warum sollte man sich Gedanken über die Kodierung machen wollen, wenn man sich bereits dazu entschlossen hat, eine allgemeine Funktion zu entwerfen, die Ersetzungen beliebiger Strings zulässt?


  • Mod

    covfefe schrieb:

    camper schrieb:

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.

    Nur noch eins: Falls der OP meine Methode in Betracht zieht und einen Zeichensatz verwendet, in dem das 'ß' in ein einzelnes char passt, sollte die Speicherreservierung mindestes 2*strlen(inputstring) sein, weil für jedes ß zu ss ein Byte mehr benötigt wird.

    Ich würde dem OP schon nahelegen, deinen Code nicht in Betracht zu ziehen. Wutz hat es zwar unhöflich gesagt, aber er hat schon Recht damit, dass das nicht gut ist. Das gravierendste Problem hat Wutz bereits angesprochen, nämlich dass bei dir die Zuständigkeiten wild hin und her geworfen werden. Aber da sind noch viele andere kleinere und größere Probleme drin. Der Code ist derzeit nicht fehlerfrei ausführbar. Nicht empfehlenswert.



  • SeppJ schrieb:

    covfefe schrieb:

    camper schrieb:

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.

    Nur noch eins: Falls der OP meine Methode in Betracht zieht und einen Zeichensatz verwendet, in dem das 'ß' in ein einzelnes char passt, sollte die Speicherreservierung mindestes 2*strlen(inputstring) sein, weil für jedes ß zu ss ein Byte mehr benötigt wird.

    Ich würde dem OP schon nahelegen, deinen Code nicht in Betracht zu ziehen. Wutz hat es zwar unhöflich gesagt, aber er hat schon Recht damit, dass das nicht gut ist. Das gravierendste Problem hat Wutz bereits angesprochen, nämlich dass bei dir die Zuständigkeiten wild hin und her geworfen werden. Aber da sind noch viele andere kleinere und größere Probleme drin. Der Code ist derzeit nicht fehlerfrei ausführbar. Nicht empfehlenswert.

    wenn du das malloc meinst: C hat leider keine Destruktoren. Aber man kann natürlich auch außerhalb malloc/free machen. Es muss ja nicht unbedingt in der Funktion stecken.

    Der Code ist nur ein Beispiel für zeichenweises Durchsuchen und Aufbauen eines neuen Strings. Verbessern kann man sowas immer.



  • camper schrieb:

    covfefe schrieb:

    camper schrieb:

    Wenn nichts mehr Thema des OP gesagt werden soll, kann ich den Thread auch schliessen.

    Nur noch eins: Falls der OP meine Methode in Betracht zieht und einen Zeichensatz verwendet, in dem das 'ß' in ein einzelnes char passt, sollte die Speicherreservierung mindestes 2*strlen(inputstring) sein, weil für jedes ß zu ss ein Byte mehr benötigt wird.

    Das Grundproblem mit deinem Vorschlag ist ja wohl, dass es ein anderes Problem als das des OP zu lösen versucht. Warum sollte man sich Gedanken über die Kodierung machen wollen, wenn man sich bereits dazu entschlossen hat, eine allgemeine Funktion zu entwerfen, die Ersetzungen beliebiger Strings zulässt?

    ich glaube er hat dieses Probleme nicht, weil Editor und Stringfunktionen mit einer enheitlichen Kodierung arbeiten. Das war bei mir leider nicht so.

    wenn ich char c = 'ß'; schreibe beschwert sich schon der Compiler, dass 'ß' nicht in ein char passt. Ich nehme an, der OP benutzt Windows, und char ist da sowas wie ein Makro für wchar_t, oder was Ähnliches.


  • Mod

    covfefe schrieb:

    Ich nehme an, der OP benutzt Windows, und char ist da sowas wie ein Makro für wchar_t, oder was Ähnliches.

    Du bist der Einzige, der versucht, nur einzelne Zeichen zu ersetzen. Für den Rest von uns spielt es schlicht keine Rolle, wieviele Bytes ß nun tatsächlich verbraucht, weil sowieso ganze Zeichenketten ersetzt werden sollen.


Anmelden zum Antworten