ß ersetzen durch "ss"



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



  • camper schrieb:

    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.

    Stimmt. Ich habe mal seinen Code ausprobiert. Der läuft bei mir auf Anhieb, ohne dass der Zeichensatz stört. strstr() ist tatsächlich besser für sowas geeignet.


  • Mod

    covfefe schrieb:

    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.

    Ich weiß wie C funktioniert. Daher sage ich ja auch, dass dein Code kein empfehlenswertes Vorbild ist.

    Wenn du selber sagst, dass der Code verbesserungswürdig ist, dann musst du dich auch nicht wundern, wenn andere Leute das auch so sagen und dem Anfänger empfehlen, sich diesen Code nicht als Vorbild zu nehmen.



  • SeppJ schrieb:

    Wenn du selber sagst, dass der Code verbesserungswürdig ist, dann musst du dich auch nicht wundern, wenn andere Leute das auch so sagen und dem Anfänger empfehlen, sich diesen Code nicht als Vorbild zu nehmen.

    Bin ja selber Anfänger. Und durch diesen Thread habe ich gelernt, besser nicht mit einzelnen Zeichen zu fummeln und lieber Stringfunktionen zu nehmen, wenn man es mit Mehrbyte-Zeichensätzen zu tun hat.

    Weiß jemand im Kopf was strlen("Faß") bei UTF8 ergibt?
    3 oder 4?



  • Hallo. Vielen lieben Dank an alle, die mir hier geantwortet haben und mich bei der Klausurvorbereitung unterstütz haben. Die Klausur ist nun geschrieben und ich habe diese mit einer 3,7 bestanden. Vielen lieben Dank nochmal.


Anmelden zum Antworten