Forum: Compiler & IDEs Zeichenkette vergleichen


von Frank (Gast)


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

von Rolf Magnus (Gast)


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";
        // ...
     }
}

von Rufus Τ. F. (rufus) Benutzerseite


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 ...

von Frank (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.