Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

C++ if- Vergleich

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
JennaJamson
Member
Member
Beiträge: 166
Registriert: 30. Mai 2004, 13:14
Wohnort: Krefeld
Kontaktdaten:

C++ if- Vergleich

Beitrag von JennaJamson »

Guten Tag,

ich weiß ich sollte mich eher Schämen für ein solches Problem hier eine Frage zu stellen, aber ich brauche nun schon viel zu lange für eine Lösung.

Es handelt sich dabei um ein einfaches in C++ geschriebenes Vergleichscript ... eigentlich sogar sehr einfach.

Nun ich habe eine CString Klasse geschrieben die mit einer Funktion getString den aktuelle String als char zeiger ausgibt.

Einmal kurz mein Problem script ....
void CApp::runMenu()
{
char *c_buff = new char;
bool i = true;
CString CStr_buff;
while(i==true)
{
cout << ">";
cin >> c_buff[0];
CStr_buff = CStr_buff + c_buff[0];
if(CStr_buff.getString=="end")
{
i = false;
}
}
}
nun, es kommt hier nciht auf die Feinheit des Programmierens sondern auf den Fett markierten Punkt an. Sollte ein Char zeiger nicht mit einem text string vergleichbar sein??? Ich habe auch schon probiert es statt mit "end" mit einem gleichwertigen zeiger zu vergleichen. NICHTS. Beim Debuggen stelle ich fest das die Werte zu Laufzeit aber gleich sind.....

Ich hoffe es war verständlich und mit kann geholfen werden ...

danke schonmal byby :0)
Mehr Sicherheit bezahlen wir mit unserer Freiheit ...

No TCPA
Tantalus
Member
Member
Beiträge: 57
Registriert: 27. Apr 2004, 15:32
Wohnort: Berlin
Kontaktdaten:

Beitrag von Tantalus »

Also meines wissens kannst du zwei Zeichenketen nicht direkt miteinander vergleichen.
GIbt der Compiler keine Warnung aus??
Wenn du zwei char pointer vergleichst zeigen ja beide auf verschiede Stellen im Speicher und sind daher nicht gleich, auch wen sie die gleiche Zeichenkette beinhalten.
Und die adresse von einem char pointer mit einer Zeichenkonstante zu vergleichen macht somit auch keinen Sinn.
Du müsstest bei beiden Zeichenketten jedes einzelne Zeichen vergleichen, dafür gibts auch die funktion strcmp(char*,char*) in der string.h.
Benutzeravatar
spunti
Hacker
Hacker
Beiträge: 598
Registriert: 6. Mai 2004, 10:49

Beitrag von spunti »

Ich hab von C keine Ahnung, aber in Java würdest du auch darüber stolpern.
Strings sind da Objekte und die kannst du nicht ohne weiteres mit == vergleichen.
Dafür gibts Methoden wie string1.compareTo(string2) oder string1.equals(string2).

grüße von der front
spunti
Benutzeravatar
JennaJamson
Member
Member
Beiträge: 166
Registriert: 30. Mai 2004, 13:14
Wohnort: Krefeld
Kontaktdaten:

Beitrag von JennaJamson »

Nun das war ja auch mein erster Gedanke das beide auf die alsche Stelle in einem Speicherbereich zeigen ... logisch eigentlich, aber ....

Erstelle ich einen Zeiger und gebe bei cout keine vorzeichen, bekomme ich doch auch die text ausgabe direckt die ich irgendwie so oder so erhalten müsste.

Wenn ich die bieden Zeiger vergleichen würde, müsste ich doch ein & vordie Variable setzen. Nur so bekomme ich doch die Adresse oder nciht?

Und ich vergleiche ja nciht das String Objeckt sondern bekomme einen Zeiger ... von char

Aber egal, ich danke euch für eure Hilfe und werde dann mal implementierte Funktionen verwenden. Danke schön und einen schönen Abend noch
Mehr Sicherheit bezahlen wir mit unserer Freiheit ...

No TCPA
Snubnose
Hacker
Hacker
Beiträge: 410
Registriert: 18. Feb 2004, 19:19
Wohnort: Schwabenland

Beitrag von Snubnose »

hmm, also 2 Sachen fallen mir auf:
strings vergleiche ich normalerweise mit strcmp()

und das CStr_buff.getString würde ich dringend als CStr_buff.getString() schreiben
Benutzeravatar
JennaJamson
Member
Member
Beiträge: 166
Registriert: 30. Mai 2004, 13:14
Wohnort: Krefeld
Kontaktdaten:

Beitrag von JennaJamson »

Vielen dank, den Fehler habe ich beim Compilieren auch schon bemerkt ....

liegt aber nciht da drann ... das es Funktionen gibt ist ja ok, aber warum oder vielleciht wie, geht es mit einem if- Vergleich ...

Naja also wie wir beschlossen haben geht es nicht, waarum ... werde ich noch ein bisschen schauen und überlegen.

Trotzdem vieln Dank byby :0)
Mehr Sicherheit bezahlen wir mit unserer Freiheit ...

No TCPA
Benutzeravatar
PC-Ulf
Member
Member
Beiträge: 180
Registriert: 1. Okt 2004, 17:30
Wohnort: Köln
Kontaktdaten:

Beitrag von PC-Ulf »

Der Wert von Zeigern wird immer und wurde schon immer als Adresse behandelt. Das ist auch der Sinn von Zeigern. Das ist zu vergleichen mit Seitenangaben in einem Inhaltsverzeichnis, auch wenn der Inhalt von Seite 3 und Seite 5 identisch sind, 3 und 5 sind es nicht.

Funktionen erkennen Zeiger, und deshalb kommen diese zum "Inhalt". Eine Modifikation des Zeigers in der Funktion ändert also z.B. nicht den Wert des Zeigers für den Aufruf.

Somit macht ein Verglich über if keinen Sinn (ohne zu den Inhalt zu gehen).
Benutzeravatar
JennaJamson
Member
Member
Beiträge: 166
Registriert: 30. Mai 2004, 13:14
Wohnort: Krefeld
Kontaktdaten:

Beitrag von JennaJamson »

Hmmm, das weiß ich ja, ich drücke mich bestimmt nur sehr ungeschickt aus ...

Naja, wie gesagt trotzdem danke ... :0)
Mehr Sicherheit bezahlen wir mit unserer Freiheit ...

No TCPA
Tantalus
Member
Member
Beiträge: 57
Registriert: 27. Apr 2004, 15:32
Wohnort: Berlin
Kontaktdaten:

Beitrag von Tantalus »

Also ich würde an deiner Stele wi gesagt die Funktion strcmp(char*,char*) verwenden oder aber was in bezug auf deine String klasse noch viel besser ist den Operator == überladen sodass du die getString() Methode nicht mehr brauchst und du dann so vergleichen könntest:
void CApp::runMenu()
{
char *c_buff = new char;
bool i = true;
CString CStr_buff;
while(i==true)
{
cout << ">";
cin >> c_buff[0];
CStr_buff = CStr_buff + c_buff[0];
if(CStr_buff=="end")
{
i = false;
}
}
}
Benutzeravatar
JennaJamson
Member
Member
Beiträge: 166
Registriert: 30. Mai 2004, 13:14
Wohnort: Krefeld
Kontaktdaten:

Beitrag von JennaJamson »

Hihi ... vielen Dank für deine anteilnahme.

:0)

Die funktion getString() bleibt und die == operator funktion wird hinzugefügt.
Die Klasse ist ja ncoh lange nicht fertig, es werden natürlich alle Operatoren und variablen- arten behandelt.

Einen schönen Tag ncoh byby :0)
Mehr Sicherheit bezahlen wir mit unserer Freiheit ...

No TCPA
Antworten