Vergleichen von zwei Wörten in eine if-Anweisung
lima-city → Forum → Programmiersprachen → C/C++ und D
anwendung
buchstabe
compiler
dynamischen arrays
gebieten
gre
kleine korrektur
knackpunkt
main
meisten anfnger
normalerweise
ntzliche befehle
pausen
string
test
uebrigens
vertan
verwendung
wenigsten
zeiger
-
Hallo,
ich kann C++ noch nicht so gut und habe ein Problem. Ich möchte ein Programm schreiben, dass ein Wort von der Tastatur einließt und es dann mit einem vorgegebenen vergleicht. Dann soll es, je nachdem ob die Wörter unterschiedlich oder gleich sind zwei verschiedene Texte ausgeben. Leider klappt das bei mir nicht. Hier ist mal mein Code:
#include <iostream>
using namespace std;
int main() {
char *wort;
cout << "Geben Sie ein Wort ein: ";
cin >> wort;
if(wort=="ich") {
cout << "Wort = ich.\n\n";
}
else {
cout << "Wort != ich.\n\n";
}
return 0;
}
Kann mir da einer helfen. Das wär echt super. Falls es hilft. Ich benutze Linux und den Compiler g++.
Jan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ja, ich lerne auch grad C++ oder ich versuche es wenigstens :P
Ich glaube, das problem liegt darin, dass "char" keine Wörter zugewiesen werden kann. Soviel ich weiß, kann "char" nur ein Buchstabe zugewießen werden.
Probier also, statt "Wort" mal "A", vielleicht geht es dann.
Edit: jop, mit einzelnen Buchstaben geht es, hab es getestet
Ich selbst hab deinen Topic schon beobachtet und hoffe, dass ein Profi uns Anfänger da mal darüber aufklähren kann, wie man Wörter eingeben und wieder ausgeben kann.
Beitrag geaendert: 3.1.2007 18:11:18 von sesch -
Moinsen ^^ ich hab mal eben ne bisschen gegooglet und das hier gefunden:
http://forum.worldofplayers.de/forum/showthread.php?t=87271&page=4
Irgendwo auf der Seite wird das mit diesem Programm erklärt was du willst:
#include <iostream> //Ein- und Ausgabestrom [cin|cout] #include <conio> //für clrscr() und weitere nützliche Befehle #include <string> //zur Verwendung von string-Variablen using namespace std; int main() { string name_01,name_02; cout <<"---------------------------------------------""\n"; cout <<"Beispielprogramm f\x081r string-Variablen""\n"; cout <<"---------------------------------------------""\n"; cout <<"name_01? ="; cin >>name_01; cout <<"name_02? ="; cin >>name_02; clrscr(); cout <<"name_01 ist "<<name_01<<"""\n"; cout <<"name_02 ist "<<name_02<<"""\n"; if(name_01=="Kevinus" || name_01=="kevinus") { cout <<"name_01=Name des Programmschreibers""\n"; } getch(); return 0; }
Char kann nur einzelne Buchstaben aufnehmen, wie sesch schon vermutet hat.
Nun eben wurde mir auch klar, wieso mein Programm in der Schule mal nicht wollte, welches ich dann mit dem Datentyp boll schreiben musste.
Ein String kann ganze Wörter aufnehmen,...ist ja leicht rauszulesen oder?
MfG Henry. -
Ah, und wieder dazu gelernt :-)
@daffi:
So sollte dann dein Code aussehen (Du musst aber die ganzen Anführungszeichen, die jetzt so " aussehen noch in normale umschreiben):
#include <iostream>
using namespace std;
int main() {
string wort;
cout << "Geben Sie ein Wort ein: ";
cin >> wort;
if(wort=="ich") {
cout << "Wort ist ich.\n\n";
}
else {
cout << "Das eingegebene Wort ist nicht das Wort: ich.\n\n";
}
system("pause"); // Kannst du auch rauslassen
return 0;
} -
Cool. Jetzt klappts. Vielen Dank für die Antworten. Tut mir Leid, dass ich nicht schneller antworten konnte, aber ich war nicht daheim.
Nochma Danke
Jan -
normalerweise geht das so:
char wort[] = "Das ist ein text";
is übrigens ein array, genu wie int zahlen[] -
Hi,
Also um mal etwas licht in die Sache zu bringen:
Wörter (strings) werden in C und C++ als Folge von Buchstaben (chars) dargestellt. Also um es genau zu nehmen in Arrays gespeichert.
char test[] = "irgenwas";
erstellt also ein array von der größe 8 (weil "irgendwas" 8 Buchstaben hat) mit den folgenden werten:
test[0] = 'i';
test[1] = 'r';
test[2] = 'g';
test[3] = 'e';
test[4] = 'n';
test[5] = 'd';
test[6] = 'w';
test[7] = 'a';
test[8] = 's';
Einfach soweit. Jetzt kommt der Knackpunkt.. es gibt auch dynamische Arrays in C/C++. Diese werden mit Zeigern abgebildet. Und hier endet das Verständniss der meisten Anfänger. Ich rate JEDEM sich mit dem Gebiet der Zeiger vertraut zu machen bevor man mit Strings und Stringfunktionen rumspielt. Falsch angewandte Stringfunktionen und Zeigerarithmetik sind das ALLERSCHLIMMSTE was man in C/C++ machen kann. Damit erzeugt man nämlich häufig Speicherzugriffsfehler, was Windows dazu bewegt das Programm einfach abzuschießen.
Die Anwendung als String wäre folgendermaßen:
char *test; //erstellen eines Zeigers auf ein char
test = new char[9]; //allokieren von 9 Speicherplätzen für ein 8 stelliges wort
strcpy(test,"irgendwas"); //kopieren des Wortes irgendwas in den Speicherbereich
Falsch ist:
test = "bla bla" //Das ist schwachsinn
test = 'b' //Auch Quark
Vergeleichen von strings in dynamischen arrays geht nicht mit:
if (test == test1)
Damit vergleicht man den ZEIGER mit einem anderen ZEIGER was nur true ergibt wenn der Zeiger auf die selbe Speicherstelle Zeigt.
Richtig wäre:
if (strcmp(test,test1)==0)
Nochmal die Bitte: erst das Kapitel mit den Zeigern lernen und VERSTEHEN bevor ihr mit Strings rumspielt. Alles andere ist keine Gute Idee.
Elandir -
Nur eine kleine Korrektur:
elandir schrieb:
char test[] = 'irgenwas';
erstellt also ein array von der größe 8 (weil 'irgendwas' 8 Buchstaben hat) mit den folgenden werten:
test[0] = 'i';
test[1] = 'r';
test[2] = 'g';
test[3] = 'e';
test[4] = 'n';
test[5] = 'd';
test[6] = 'w';
test[7] = 'a';
test[8] = 's';
Es wird ein Array von 10 chars erstellt, nicht von 8. Es sind zwei mehr, weil du dich zum einen bei der Anzahl der Buchstaben vertan hast und ausserdem fehlt noch das abschliessende Null-Byte.
Analog dazu ist auch dein Beispiel bei der Verwendung von new nicht ganz korrekt. -
Das char-Array ist typisch für C. In C++ verwendet man üblicherweise die String-Klasse, weil es sich damit leichter arbeiten lässt und man naturgemäß ein paar Pointerfehler weniger einbaut ^^
Ich bin ja der Meinung man sollte erst C lernen und danach C++. Aber das ist nicht Thema dieses Threads und wurde anderswo hier im Forum schon ausführlichst diskutiert ;)
Da das Problem des Threaderstellers geklärt wurde, wird dieses Thema geschlossen.
Für Rückfragen stehe ich gern zur Verfügung.
MfG,
thw -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage