www.mikrocontroller.net

Forum: Compiler & IDEs switch-case Anweisung "Wörter" abfragen


Autor: Marcus Zinn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !
Ich möchte gerne mit einer switch - case Anweisung Wörter "Strings" 
abfragen, die in einem Array stehen. Nun vermutlich wird das n. so 
schwer sein, aber mir fehlt dazu die passende Programmier - Umsetzung.

char ARRAY[256];

switch(ARRAY)
{ case Hund:  {}
  case Katze: {}
  case Maus:  {} }

Nun, der Inhalt des Array´s kann variieren.
Hund,Katze,Maus sollen verschiedene Strings darstellen.
Das diese switch - case Anweisung so nicht funktioniert ist mir auch 
klar.

Jetzt würde es mich freuen, wenn mir jemand nen Denkanstoß für mein 
Problem verpassen würde, wie ich die Programmierung in den Griff 
bekomme!

Ich danke im Voraus!

MFG Marcus

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
einfach bezeichner ( == zahlen) für deine strings verwenden. enums z.B.
bye kosmo

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Zinn wrote:
> switch(ARRAY)
> { case Hund:  {}
>   case Katze: {}
>   case Maus:  {} }

Prinzipiell geht sowas in C schonmal nicht. Zahlen kannst du per 
switch/case auswerten, aber nicht Strings.

Du müsstest das so in der Art machen:
if (strcmp(ARRAY, "Hund") == 0)
    printf("Wuff Wuff");
else if (strcmp(ARRAY, "Katze") == 0)
    printf("Miau!");
else if (strcmp(ARRAY, "Maus") == 0)
    printf("Fiep");

Das ganze ist aber nicht wirklich resourcensparend, da immer mehrere 
Vergleiche stattfinden müssen (Jedes Zeichen wird mit jedem verglichen). 
Besser wäre es Konstanten in Form von Zahlen zu benutzen.

Was willst du denn genau machen?

Autor: Florian Demski (code-wiz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie viele Wörter möchtest Du denn unterscheiden? Wenn sich z.B. alleine 
die ersten Buchstaben schon unterscheiden, kannst Du bei Deinem case 
bleiben, nur entsprechend das erste Zeichen, also ARRAY[0] vergleichen. 
Ansonsten - je nachdem, wie häufig das aufgerufen wird und wie schnell 
das sein muss -, könntest Du auch Deine Zeichenketten über eine Tabelle 
mit binärer Suche in eine Zahl umwandeln. Bei zwei verschiedenen Werten 
lohnt sich das wohl aber nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.