www.mikrocontroller.net

Forum: Compiler & IDEs Zeichenkette vergleichen


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich möchte eine Zeichenkette so vergleichen:

void Tage (void){
if (pText == "Montag" && loop == 23){
(pText = "Dienstag");}
if (pText == "Dienstag" && loop == 23){
(pText =  "Mittwoch");}
if (pText == "Mittwoch" && loop == 23){
(pText = "Donnerstag");}
if (pText == "Donnerstag" && loop == 23){
(pText = "Freitag");}
if (pText == "Freitag" && loop == 23){
(pText = "Samstag");}
if (pText == " Samstag" && loop == 23){
(pText = "Sonntag");}
if (pText == "Sonntag" && loop == 23){
(pText = "Montag");}
}

loop wird in einer anderen Funktion inc, am Anfang des Programms ist
pText mit Montag init und wenn 23 erreicht wieder auf 0 gesetzt.
Geht das so überhaupt???
Danke Gruss
Frank

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme mal an, daß es sich um C handelt und pText vom Typ const char*
ist. Dann geht das so offiziell nicht, obwohl es unter Umständen
funktionieren kann. Du machst keinen Stringvergleich, sondern einen
Zeigervergleich. Du solltest strcmp o.ä. verwenden.
Ein weiteres Problem ist, daß deine if-Abfragen alle gleichzeitig
zutreffen würden. Wenn die erste zutrifft, wird der String auf
"Dienstag" gesetzt, woraufhin die Bedinung für's zweite if auch
zutrifft, u.s.w., also ist am Ende der String wieder auf "Montag"
gesetzt. Du müßtest ein else dazwischen tun. Außerdem könntest du die
Prüfung auf loop == 23 rausnehmen, so daß sie nicht immer wiederholt
wird. Das würde dann etwa so aussehen:

void Tage(void)
{
    if (loop == 23)
    {
        if (strcmp(pText, "Montag") == 0)
            pText = "Dienstag";

        else if (strcmp(pText, "Dienstag") == 0)
            pText = "Mittwoch";
        // ...
     }
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das geht nicht.

   pText == "Montag"

vergleicht nur zwei Pointer, nicht aber den Inhalt der
Speicherbereiche, auf die die Pointer zeigen.

Für Dich besser geeignet ist die Bibliotheksfunktion strcmp() oder
stricmp(). Letztere ignoriert Groß-/Kleinschreibung.

Der Rückgabewert der Funktion ist 0, wenn beide Argumente gleich sind.

Also:

   if (!strcmp(pText, "Montag) && loop == 23)


Wenn es Dir nur darum geht, den folgenden Wochentag zu bestimmen, ist
es IMHO sinnvoller, nicht einen Textstring mit dem Namen des Wochentags
zu verwenden, sondern eine int-Variable, die von 0 (Montag) bis 6
(Sonntag) zählt. Dann ist das nämlich nur eine einfache Addition und
ein Wertebereichsvergleich ...

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten!
ich habe es wie Rufus gesagt hat eine int Variable genommen die inc
wird und dann dem Tag zugeordnet wird. Funzt prima!
Ich denke immer viel zu kompliziert!!!
Danke
Frank

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.