Zeichenkette vergleichen

Gast #238951
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
Gast #238952
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";
        // ...
     }
}
Persönliche Seite #238953
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 ...
Gast #238954
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.