Mehrfaches ODER.



  • Hallo,

    welche Möglichkeit sollte man für ein mehrfaches ODER unter ANSI-C bevorzugen?

    if(satz[i] == ',' || 
       satz[i] == '.' ||
       satz[i] == '!' ||
       satz[i] == '?' ){
            printf("%i ist ein satzzeichen",i);
    else
    [...]
    }
    

    oder

    switch(satz[i]){
           case ',':
           case '.':
           case '!':
           case '?':
              printf("%i ist ein satzzeichen",i);
           default:
    [...]
    

    Oder einfach je nach Geschmack?

    Danke
    Toby



  • Das sind zwei verschiedene Dinge. Switch ist eigentlich eher dafür geeignet, mehrere Fälle zu unterscheiden, d. h. deine Problematik würd ich nicht durch ein Switch/Case Konstrukt lösen. Kurzum, ich würde die if Abfrage bevorzugen, weil die am ehesten ausdrückt, was du vorhast und weniger fehleranfällig ist.



  • einfach

    int isIn(char c, char* pattern)
    {
      return strchr(pattern, c)!=NULL;
    }
    

    und dann ganz einfach;

    if(isIn(satz[i], ",.!?"))
    {}
    

    🙂



  • Das kommt auch darauf an, was du abfragen willst. Wenn du wie in deinem Beispiel Konstanten abfragst, sind letzen Endes beide Methoden gleich gut (derartiges dürfte ohnehin optimiert werden).
    MfG
    Stentor



  • Also ich finde für den Fall die Methode von Shade am besten. *schleim* 😉

    Aber allgemein kommt es ganz einfach darauf an was man genau alles abprüft. Wenn z. B. noch einzelne andere Zeichen abgeprüft werden, bei denen dann verschiedene Sachen gemacht werden, dann wär ein switch() wieder ganz gut angebracht. Es kommt also immer auf den Fall an.


Log in to reply