if (char == ?
-
Hallo,
ich habe ein Frage.
Und zwar habe ich eine Variablechar mode [255]; char id [255];
Jetzt will ich mit Hilfe einer if Schleife andere Werte zuweisen. Also so:
if (mode == "eins") int Mode = 1; else int Mode = 0;
genauso mit der ID.
Aber irgendwie kriegt er den Vergleich nicht auf die Reihe....
Ne Idee??
-
Man kann Strings nicht mit == vergleichen.
-
OT: Das zweite Mal innerhalb einer Minute
-
Es gibt keine if-Schleifen
-
Neku schrieb:
Man kann Strings nicht mit == vergleichen.
Du redest Schwachsinn. Dein Link bezieht sich auf Windows CE 5.0.
Strings können verglichen werden.
Hie sogar ein Beispiel:
[url]
http://msdn2.microsoft.com/en-us/library/y4k49tt9.aspx
[/url]
-
#include <string> int main() { char a[]="hallo"; char b[]="hallo"; if(std::strcmp(a,b)==0) //liefter 0 zurück wenn beide strings gleich { //... } return 0; }
ich hab das programm nicht kompiliert, es ist sicher richtig aber ich bin mir nicht 100% sicher ob strcmp im namespace std ist, sollte aber eigentlich schon dort sein.
-
TravisG schrieb:
#include <string> int main() { char a[]="hallo"; char b[]="hallo"; if(std::strcmp(a,b)==0) //liefter 0 zurück wenn beide strings gleich { //... } return 0; }
ich hab das programm nicht kompiliert, es ist sicher richtig aber ich bin mir nicht 100% sicher ob strcmp im namespace std ist, sollte aber eigentlich schon dort sein.
Das ist das C++ Forum. Hier wird String verwendet. strcmp ist C. Daher ist strcmp auch nicht im Namespace std enthalten.
-
... schrieb:
Das ist das C++ Forum. Hier wird String verwendet. strcmp ist C. Daher ist strcmp auch nicht im Namespace std enthalten.
selbstverständlich befindet sich strcmp im namespace std. der korrekte header dafür ist allerdings <cstring>
-
mein fehler, sorry
-
ok dann <cstring>
-
char - ly schrieb:
Hallo,
ich habe ein Frage.
Und zwar habe ich eine Variablechar mode [255]; char id [255];
Jetzt will ich mit Hilfe einer if Schleife andere Werte zuweisen. Also so:
if (mode == "eins") int Mode = 1; else int Mode = 0;
genauso mit der ID.
Aber irgendwie kriegt er den Vergleich nicht auf die Reihe....
Ne Idee??
Erstmal solltest du keine char arrays verwenden. Wenn du C++ nutzt, stellt die stl schon diverse Klassen zum Stringhandling bereit.
#include <string> // ... std::string mode( "deinwert" ); std::string id( "deinwert" ); if ( mode == "eins" ) { // ... } else { // ... }
Außerdem solltest du int Mode nicht innerhalb deines if/else Blocks deklarieren. Da diese außerhalb desselben nicht sichtbar ist.
Desweiteren musst du dir überlegen ob du nicht bessere Bezeichnungen für deine Variablen verwenden willst. Du verwendest mode und Mode, das ist unübersichtlich und macht den Quellcode nich gerade schöner.grüße
-
... schrieb:
strcmp ist C. Daher ist strcmp auch nicht im Namespace std enthalten.
strcmp ist sowohl im globalen als auch im std Namensraum verfügbar, sofern die richtige Headerdatei (siehe camper) verwendet wird.
-
Hi!
Wie gesagt, vergiss das C-Zeug, in C++ gibt es bessere Lösungen.
grüße
-
David_pb schrieb:
Wie gesagt, vergiss das C-Zeug, in C++ gibt es bessere Lösungen.
Man sollte aber trotzdem wissen, wie dieses "C-Zeug" funktioniert. Damit meine ich nicht unbedingt printf etc., aber C-Strings sollte man schon beherrschen, auch wenn man sie später nicht benutzt.
-
Hi!
Man kann sich das evtl mal kurz anschauen. Aber wirklich brauchen tust du sie nicht. Und in seinem Fall erst recht nicht.
grüße
-
Kann man eigentlich mit std::string schneller die Länge eines null-terminierten char* rausfinden als mit strlen? Wenn nicht, dann bleibe ich auch bei C++ bei den C-Funktionen
-
Hi!
std::string s( "Hallo Welt" ); std::cout << s.length();
Von Aufwand ist das wohl das selbe. Oder was meist du mit schneller?
grüße
-
Na wenn ich es über die Stringklasse mache, muss ja erst ein Objekt erzeugt werden (evtl. wird der String dann sogar kopiert, weiß ich nicht genau). Wenn ich strlen benutze wird direkt die Länge zurückgegeben, ohne vorher die geringste Kleinigkeit zu tun.
-
Neku schrieb:
Na wenn ich es über die Stringklasse mache, muss ja erst ein Objekt erzeugt werden (evtl. wird der String dann sogar kopiert, weiß ich nicht genau). Wenn ich strlen benutze wird direkt die Länge zurückgegeben, ohne vorher die geringste Kleinigkeit zu tun.
Stimmt nicht :p
Beim Aufruf von strlen wird der String komplett durchgenudelt. Beim nochmaligen Aufruf nochmal
s.length() liefert vermutlich solange denselben, konstanten Wert wie sich die String-Daten in s nicht ändern, hat also hier einen Cache-Effekt.
-
Hi!
Wo ist dein Problem? Wenn du ein C-String verwendest benötigst du auch Speicher, also kannst du genauso gut ein string Objekt erzeugen.
Und strlen( "Hallo Welt" );[ halt ich nicht für besonders sinnvoll, zumal hier auch eine Temporäre Variable erstellt wird.Und warum willst du bitte in C++ alte C Funktionen verwenden, wenn es doch viel bessere Alternativen gibt?
Wenns dir nur um Geschwindigkeit geht, dann verwende lieber gleich reines C.Rest: siehe vorigen Post!
grüße