String vegleichen

  • also hab mal zwei strings mit irgendeiner zeichenkette gefüllt, aber will das ohne die funktion strcmp() machen. hätte jemand ne idee?

  • Hallo,
    tja warum nicht strcmp? Gibt es da wirklich einen Vernünftigen Grund dagegen? Was hast du überhaupt vor?


    Gut es gibt für Stringvergleiche etc. auch noch diese andere "Standartfunktionsbibliothek",suche mal bei google oder in der MSN nach "Regular Expression", viel Spass damit ;)


    Peter

  • Ich dumme Kuh. Frohes neues Jahr wünsche ich euch allen!!!
    das mit den expressions werd ich mir mal anschauen.


    also hab das jetzt mal so gemacht. das einzigste problem liegt noch bei der rückgabe von return 0 in dem else block, weil wenn ich den ersten buchstabe vergleiche mit dem ersten buchstabe aus dem anderen string dann muss er ja auch noch den zweiten mit dem zweiten buchstaben vegleichen bis zum ende der beiden wörter um herauszufinden welches wort alphabetisch vor dem anderen steht oder ob sie komplett übereinstimmen.


  • Hallo Goldie,


    damit nicht nur die jeweils ersten Zeichen betrachtet werden, müssen die Zeichenketten in einer Schleife Zeichen für Zeichen verglichen werden. Wenn sich in einem Schleifendurchlauf die Zeichen unterscheiden kann die Funktion mit dem entsprechenden return-Wert verlassen werden. Wenn die Zeichen gleich sind werden die nächsten verglichen. Das ganze so lange, bis mindestens eine Zeichenkette zu Ende ist.
    Vor dem Vergleichen könnte man die Zeichen noch in Kleinbuchstaben wandeln, so dass die Schreibweise keine Rolle spielt.
    In der switch-case ist noch die Zuordnung vertauscht.


    Das ganze könnte so aussehen:



    hoffe das hilft dir :wink:

  • danke jamo für deine hilfe, hab da jetzt noch was dazu geschrieben mit dem umwandeln von umlauten damit die auch richtig sortiert werden. es geht alles. was ich halt nicht verstehe warum wird das ß und ss erst nach dem umwandeln in kleinbuchstaben richtig behandelt, sowie es auch im duden steht das z.b. Straße als erstes kommt und dann Strasse. wenn iich die umwandlung draußen lass ist es genau umgekehrt. dann wollt ich noch fragen ob man die suche und umwandlung der umlaute auch einfacher gestalten kann? gibt es vielleicht noch was, was ich umschreiben oder verkürzen könnte?


    hier der code:

  • Guck dir mal ne ASCII Zeichentabelle an oder lass dir die Dezimalwerte der Zeichen ausgeben, dann siehst du genau was passiert.
    Evtl muss die Wandlung der Groß/Klein-Schreibweise für die Umlaute gesondert betrachtet werden.

  • hi zusammen,
    hab gestern noch einen dummen, dummen fehler gefunden! in der funktion wird als erstes klein- und großschreibung unterschieden. der fehler is das, wenn ich " schlafmütze " mit "Dummerchen" vergleichen lass, er mir schlafmütze vor Dummerchen ausgeben würde.


    gruss goldie

  • hi zusammen,
    hab nochmal ne frage zu string. angenommen ich hab im string1 eine Wort drinne stehen zum Beispiel "Maße", jetzt will ich aber das er mir, wenn ich diesen String mit einem anderen String vergleiche, das "ß" wie ss behandelt.
    ich hab nach dem "ß" erstmal gesucht und dann gesagt er soll ein "ss" drauß wandeln. das geht ja auch nur leider überschreibt er mir dann den nächsten buchstaben also z.b. Mass anstatt Masse. Wie kann ich dem sagen das er den String um 1 feld erweitern soll damit er mir keinen anderen buchstaben überschreibt. oder würde es da noch ne andere möglichkeit geben?


    gruss goldie

  • Tja nach diesem ß suchen,alles was dahinter kommt abschneiden,
    den letzten Buchstaben des Feldes auf s setzen,das letzte Feld+1 auch s und Feld+2 auf "\0" so,jetzt den abgeschnittenen Teil mit strcat wieder anhängen.


    Klappt ntürlich nur in eine Richtung,aus ß ein ss machen geht noch,
    aber anders herum geht nicht wegen der Rechtschreibung.


    Peter

  • Warum ist an dieser Stelle im Programm:


    if(str1[i]<91)cZeichen1=str1[i]+32;
    else cZeichen1=str1[i];
    if(str2[i]<91)cZeichen2=str2[i]+32;
    else cZeichen2=str2[i];


    gerade die 91 und die 32 definiert?? Was sollen die denn genau bewirken und wieso gerade solche "krumme" Zahlen?!?

  • du kannst das so programmieren das du die dezimalzahlen beachtest (dank an jamo). aber wenn du das ganze in java versuchst zu programmieren dann haut er dir das ganze ding um die ohren. eine weitere lösung wäre:


    Code
    str1[i] = str1[i]  + 'a' - 'A';


    lastwebpage


    danke für deinen hinweis aber das muss irgendwie einfacher gehen, hab das mal im netz gesehen weiss aber net mehr wo. muss ich mir noch etwas kopfschmerzen bereiten.

  • Hallo,
    zu 2:
    die meisten Suchfunktionen geben einen Zeiger auf den Rest des feldes zurück also sind das höchstens 2-3 Zeilen.



    zu 1. Ich will jetzt,besonders die "Anfänger" auch auf folgendes hinweisen:
    wenn ihr mit Visual C++ ein neues Projekt erstellt sieht das so aus:
    int _tmain(int argc, _TCHAR* argv[])
    {
    }
    das entscheidene ist dieses _tmain und _TCHAR,für reine "DOS-Übungsaufgaben" wie hier könnt ihr weiterhin main und char[] verwenden,
    allerdings bei Windows und WIN32-Consolen Programmen solltet ihr die TChar Funktionen oder gleich die von Windows verwenden
    wchar_t z.B. anstelle von char verwenden da ab Windows2000 alle Programm UNICODE fähig sein sollten.


    Dies nur als Hinweis wenn jemand die Beispiel hier mit Editboxen, Buttons in einem Windowsdialog versucht....
    (Auch so was einfaches wie GROSS in klein sollte man da besser mit entsprechenden Makros/Funktionen machen....


    Peter

  • Hi nochma!
    Wenn man in diesem Code ein ä und ein ü eingibt, dann soll ja eigentlich das ä zu a und ü zu u werden! Das heisst das ä(a) müsste vor dem ü(u) stehen! Dies wird aber nicht so ausgegeben...sondern "ü kommt vor ä"! Wo liegt denn da noch n Fehler?!?


    P.S.: Bei den Grossbuchstaben klappt das! Also "Ä kommt vor Ü"!

  • hi ihr,


    also du solltest das wort schritt für schritt vollständig mit deinen kriterien bearbeiten das heißt,


    1. kleinbuchstaben wandeln
    2. umlaute wandeln
    3. nach dem "ß" schauen
    4. Strings vergleichen


    wenn schritt 4 keinen returnwert zurückgegeben hat dann musst du halt die länge des strings vergleichen.
    das mit dem "ß" machst du am besten mit einem 2 String (tipp von lastwebpage :) danke). und dann musst du
    halt schauen wenn die wörter gleich sind, denn dann musst du noch einbauen das ß vor ss kommen soll, dass
    machst du am besten mit ner normalen variable und überprüfst dann den wert.


    PS: Immernoch Gießen!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!