Philipp Hasenfratz: Strings vergleich

Beitrag lesen

Halihallo annA

der Titel war etwas irreführen, zugegeben :o)
tatsächlich will ich zwei Strings vergleichen, bei dem
einen aber eben immer ein Zeichen löschen um zu schauen,
ob ein Tippfehler vorliegt.

Huh? - Wie definierst du einen Tippfehler? - Und wozu musst du dann
immer ein Zeichen löschen?
Du würdest also n-Mal das Zeichen an n-tem Index löschen und dann den
String auf Gleichheit prüfen? - Schneller und effizienter ginge es, wenn man mit zwei Pointern über die Strings iteriert und bei Nichtübereinstimmen überprüft, ob das "nächste" Zeichen wieder übereinstimmt. Das könnte man so als Tippfehler definieren. Dieser Algorithmus würde performanter sein. Ein kleines Beispiel, wie dies gemeint ist, steht unten.

Das mit dem memcpy werde ich mir mal anschauen, auch wenn
ich wieder von dem "Mehrpassparser"-Projekt abgerückt bin,
kann man sowas doch immer mal gebrauchen :o)

Mehrpassparser-Projekt? - Was hattest du denn da vor? :-)

---

#include <stdlib.h>
#include <stdio.h>

int is_tipp_error(char *str1, char *str2) {
  while ((str1 != NULL) && (str2 != NULL)) {
    if (*str1 != *str2) { // huh, Tippfehler???
      if ((*(str1+1) == *str2) || (*(str2+1) == *str1)) {
        // OK, next char matches again => Tippfehler wahrscheinlich
        return 1;
      } else {
        return 0; // da ist mehr als ein Zeichen falsch
                        // => kein Tippfehler!
      }
    }
    str1++; str2++;
  }
  return 0;
}

int main(void) {
  char str1[] = "Philipp";   /* :-) */
  char str2[] = "Phillip";
  char str3[] = "annA";

printf("%s <=> %s : %d\n", str1, str2, is_tipp_error(str1,str2) );
  printf("%s <=> %s : %d\n", str2, str3, is_tipp_error(str2,str3) );
  printf("%s <=> %s : %d\n", str3, str1, is_tipp_error(str3,str1) );

return 0;
}

---

so mal auf die schnelle hingeplappert. Falls ein Zeichen nicht
übereinstimmt, wird einfach geprüft, ob das "nächste" Zeichen
(entweder von str1 oder str2) wieder übereinstimmt; falls ja kann
man von einem Tippfehler ausgehen, falls nein ist der
String "definitiv" verschieden.
Hängt eben alles von deiner Definition von Tippfehler ab. Und zudem:
der Source-Code von oben beachtet nur das erste Auftreten! - Das ist
natürlich nicht im Sinne der Aufgabe; soll auch nur den "Sinn" oder
das Vorgehen verdeutlichen...

Viele Grüsse

Philipp