Go Down

Topic: Strings vergleichen (Read 157 times) previous topic - next topic

denrat

Guten Abend,
ich stehe gerade etwas auf dem Schlauch und finde meinen Fehler nicht.
Die Idee ist es 2 Strings miteinander zu vergleichen.
Der eine String ist ein konstanter und so im Code hinterlegt. - String string2 = "20:08"; -
In dem anderen String wird die aktuelle Uhrzeit gespeichert. - String string1 = String(5); -
In der loop wird dann die Zeit in string1 gespeichert, dass das funktioniert, habe ich im seriellen Monitor
anzeigen lassen.
Die beiden Strings habe ich in einer if-Abfrage miteinander verglichen.
Code: [Select]
if("string1" == "string2")
{
Serial.println("funktioniert");
}


Das funktioniert nun aber überhaupt nicht :smiley-confuse:
Hat jemand die erleuchtende Lösung?
LG Dennis

combie

#1
Jul 28, 2020, 08:27 pm Last Edit: Jul 28, 2020, 08:29 pm by combie
strcmp()

Quote
Die beiden Strings habe ich in einer if-Abfrage miteinander verglichen.
Nein, hast du nicht.
Du vergleichst Adressen im Speicher, Pointer, und die sind natürlich gezwungener maßen unterschiedlich.

Tipp:
Ein schönes dickes modernes C++ Buch erwerben.
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

denrat

Also muss in die if-Abfrage strcmp(string1, string2) == 0?

noiasca

#3
Jul 28, 2020, 09:14 pm Last Edit: Jul 28, 2020, 09:16 pm by noiasca
https://www.arduino.cc/en/Tutorial/StringComparisonOperators
vs
http://www.cplusplus.com/reference/cstring/strcmp/

und aufpassen:
Arduino String ist nicht gleich c++ string
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

MicroBahner

#4
Jul 28, 2020, 09:39 pm Last Edit: Jul 28, 2020, 09:40 pm by MicroBahner
Du musst die "Gänsefüßchen" in deiner Abfrage weglassen. Sonst vergleichst Du in der Tat die Pointer auf 2 unterschiedliche Stringkonstante.
Gruß, Franz-Peter

denrat

#5
Jul 28, 2020, 10:07 pm Last Edit: Jul 28, 2020, 10:08 pm by denrat
Du musst die "Gänsefüßchen" in deiner Abfrage weglassen. Sonst vergleichst Du in der Tat die Pointer auf 2 unterschiedliche Stringkonstante.
Irgndwie wird die If-Abfrage so immer erfüllt und ich verstehe nicht wieso. :smiley-confuse:

Code: [Select]
#include <DS1302.h>
String string1;
String string2 = "22:05";

// Init the DS1302
DS1302 rtc(10, 9, 8);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
string1 = rtc.getTimeStr(FORMAT_SHORT);

Serial.println(string1);
if(string1 == string2);
{
Serial.println("funktioniert");
}
 

delay (1000);
}

combie

#6
Jul 28, 2020, 10:33 pm Last Edit: Jul 28, 2020, 10:38 pm by combie
Quote
String string1;
Achso, du verwendest die String Klasse....

Das ging aus deinem ersten Quelltext nicht hervor.
Und im Text habe ich es nicht erkannt.
Tja... (sorry)

Die String Klasse bringt ihren eigenen Vergleich mit.
Für C Strings ist strcmp() richtig.


Quote
Irgndwie wird die If-Abfrage so immer erfüllt
Nein!
 Wird sie nicht.

Code: [Select]
if(string1 == string2);
Was meinst du wohl, was das Semikolon dort bewirkt?
Richtig!
Dort endet die If abfrage.

Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Quelle: Jean-Paul Sartre

denrat

Achso, du verwendest die String Klasse....

Das ging aus deinem ersten Quelltext nicht hervor.
Und im Text habe ich es nicht erkannt.
Tja... (sorry)

Die String Klasse bringt ihren eigenen Vergleich mit.
Für C Strings ist strcmp() richtig.

Nein!
 Wird sie nicht.

Code: [Select]
if(string1 == string2);
Was meinst du wohl, was das Semikolon dort bewirkt?
Richtig!
Dort endet die If abfrage.


Danke, manchmal sieht man das offensichtlichste einfach nicht mehr.

Go Up