einzelne string Elemente vergleichen



  • Hallo Leute ich bräuchte Hilfe Wörter welche ich als strings deklariert habe individuell zu vergleichen. Also die individual characters.
    [/code]
    const char *alt = "Viel Spaß";
    char neu[50]={"Viel Spass"};

    for(c=0;c<d;c++)
    {
    d=1;

    if(satz1neu[c]==satz1[c])
    {
    d++;
    }
    else
    {
    c++;
    mistake=c;
    printf("Der Fehler liegt bei Element %d \n",element);
    }
    }



  • const char *alt = "Viel Spass";
       const char *neu = "fiel spass";
       int i = 0;
       while(*alt++ == *neu++)
          ++i;
    
       printf("Fehler bei: %d\n", i);
    

  • Mod

    Belli schrieb:

    const char *alt = "Viel Spass";
       const char *neu = "fiel spass";
       int i = 0;
       while(*alt++ == *neu++)
          ++i;
          
       printf("Fehler bei: %d\n", i);
    

    Und was passiert, wenn die beiden Zeichenketten gleich sind?

    PS:

    char neu[50]={"Viel Spass"};
    

    Das seh ich in letzter Zeit dauernd. Ist das irgendein neues Buch? Was ist aus dem guten alten

    char neu[50]="Viel Spass";
    

    oder

    char neu[]="Viel Spass";
    

    geworden? Ist doch ein schönes Feature, dass man das machen kann. Die Variante mit den {} ist auch nicht konsequenter im Vergleich zu anderen Arrayinitialisierungen, schließlich wäre die konsequente Variante

    char neu[50]={'V', 'i', 'e', /* ... */ 's', 's', '\0'};
    

    Und wieso hier überhaupt einmal ein Array und einmal ein Zeiger, zumal man das (zudem noch überdimensionierte) Array nie verändert?



  • Dann rennt das Ding viel zu weit!
    Hab ich schon bemerkt. Ich habe dann festgestellt, dass ich zu blöd bin, es so kurz und knackig zu formulieren, wie ich mir das zuerst vorgestellt hatte.

    Anderer Vorschlag:

    const char *alt = "Viel Spass";
       const char *neu = "Viel Spass";
       int i = 0;
       while(1)
       {
          if(alt[i] == neu[i])
             if(alt[i])
                ++i;
             else
             {
                i = -1;
                break;
             }
          else
             break;
       }
    
       printf("Abweichung beim %d. Zeichen\n", i);
    

    Wobei -1 für Übereinstimmung steht.
    Edit:
    Im Nachhinein kommt es mir eh blöd vor, die Zeiger zu verändern!


  • Mod

    Irgendwie mag ich Fehlerwerte wie das -1 im Ergebnis einer Funktion (und erst recht als Ausgabe) nicht. Mein (ungetesteter) Vorschlag:

    while(*alt && *neu && *alt++ == *neu++) ++i;
    if (*alt || *neu) printf("Abweichung beim %d. Zeichen\n", i);
    

    Im Nachhinein kommt es mir eh blöd vor, die Zeiger zu verändern!

    Hier ja. Der Code gehört aber eindeutig in eine Funktion und dann wäre das eine gute Methode. Nun, man hat ja sowieso einen Index, insofern ist es ja auch nicht so schwer, es mit Indizes zu schreiben:

    while(alt[i] && neu[i] && alt[i] == neu[i]) ++i;
    if (alt[i] || neu[i]) printf("Abweichung beim %d. Zeichen\n", i);
    


  • Es reicht auf *neu oder *alt zu testen

    while(*alt && *alt++ == *neu++)
    

    Denn der Teil ist ja nur nötig, wenn die Strings gleich sind. Aber dann ist auch *neu Null



  • Bei

    while ( *alt){
    
         alt++;
    }
    

    Wodurch wird eigentlich *alt ungültig? Weil *alt irgendwann '\0' ist?



  • @unwissen:

    '\0' (Nullzeichen) == 0 (Ganzzahl 0) == negativ.


Anmelden zum Antworten