Quellcode - Hilfe benötigt !!
-
Kann mir mal jemand genau erklären für was die einzelnen Befehle gut sind! Ich versteh einfach nicht was das Programm genau macht!!
//zeichen01.cpp #include <iostream> using namespace std; int main() { char satz[80],gesucht; int zeichen,i,anzahl=0; cout<<"\nBitte geben Sie einen Satz ein.\n"; cin.getline(satz,80); cout<<"\nWelches Zeichen soll gesucht werden?\n"; cin>>gesucht; cout<<"\nDer Satz besteht aus "<<strlen(satz)<<" Zeichen.\n"; zeichen=strlen(satz); for (i=1;i<=zeichen;i++) { if(satz[i]==gesucht) { anzahl=anzahl+1; } } cout<<"\n\nDas Zeichen "<<gesucht<<" kommt "<<anzahl<<" mal vor."; cin.get();cin.ignore(); }MFG
//Edited: Codetags hinzugefügt (evilissimo)
-
Hallo,
benutze doch bitte Code-Tags, dann kann man deinen Code auch lesen. Ich hab auch noch einiges geändert:
//zeichen01.cpp #include <iostream> //Einbinden von Header-Datei iostream, ist für Ein-Ausgabe zuständig #include <string> //Für die Stringklasse using namespace std; //Vermeidet, jedesmal std:: vor die Funktionen/Klassen der Standardbibliothek schreiben zu müssen int main() { //Definition von einem C-String (char-Array) mit 79 Zeichen + 1 Terminierungszeichen ('\0') //char satz[80]; //Aber in C++ nimmt man std::strings dafür: string satz; cout<<"\nBitte geben Sie einen Satz ein.\n"; //selbsterklärend getline(cin,satz); //liest von der Standardeingabe und schreibst sie in satz rein //s.o. char gesucht=0; cout<<"\nWelches Zeichen soll gesucht werden?\n"; cin>>gesucht; int anzahl_zeichen = satz.size(); //Fehler korrigiert cout<<"\nDer Satz besteht aus "<<anzahl_zeichen<<" Zeichen.\n"; int anzahl=0; for (int i = 0;i < anzahl_zeichen;i++) { //Array durchlaufen if(gesucht == satz[i]) { //Entspricht i-tes Zeichen dem gesuchten? Wenn ja, dann anzahl hochzählen. ++anzahl; } } return 0; //main hat einen Rückgabewert! }Falls du weitere Fragen hast, lies ein Tutorial (http://tutorial.schornboeck.net/inhalt.htm oder http://www.volkard.de/Cpp/Tutorial/index.html) oder kauf dir ein Buch (C++ Lernen und professionell anwenden von Peter Prinz und
Ulla Kirch-Prinz, erschienen im mitp Verlag).EDIT: C(++) hat keine Befehle.
MfG
GPC
-
Und so lässt es sich sogar kompillieren: (alle Änderungen durch !! Fehler !! gekennzeichnet)
#include <iostream> //Einbinden von Header-Datei iostream, ist für Ein-Ausgabe zuständig #include <string> //Für die Stringklasse using namespace std; //Vermeidet, jedesmal std:: vor die Funktionen/Klassen der Standardbibliothek schreiben zu müssen int main() { //Definition von einem C-String (char-Array) mit 79 Zeichen + 1 Terminierungszeichen ('\0') //char satz[80]; //Aber in C++ nimmt man std::strings dafür: string satz; cout<<"\nBitte geben Sie einen Satz ein.\n"; //selbsterklärend getline(cin,satz); //liest von der Standardeingabe und schreibst sie in satz rein //s.o. char gesucht=0; cout<<"\nWelches Zeichen soll gesucht werden?\n"; cin>>gesucht; int anzahl_zeichen=satz.length(); // !! Fehler 1 !! cout<<"\nDer Satz besteht aus "<<anzahl_zeichen<<" Zeichen.\n"; int anzahl=0; for (int i = 0;i < anzahl_zeichen;i++) { //Array durchlaufen !! Fehler 2 !! if(gesucht == satz[i]) { //Entspricht i-tes Zeichen dem gesuchten? Wenn ja, dann anzahl hochzählen. ++anzahl; // !! Fehler 3 !! } } cout<<"\n\nDas Zeichen "<<gesucht<<" kommt "<<anzahl_zeichen<<" mal vor."; // Anmerkung: sollte wieder ausgegeben werden return 0; //main hat einen Rückgabewert! }Wenn du schon richtiger Weise anmerkst, dass man in C++ String verwendet, dann ist strlen() nicht konsequent und wird darüber hinaus mit einem Fehler bestraft: 'strlen': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich
-
warum sollten da fehler drinne sein? das Programm wurde mir so von einem Lehrer präsentiert und es lief einwandfrei!!!
-
er hat schon recht - die funktion strlen ist normal für char-arrays und nicht für die string-klasse.
mfg blan
-
Er ist Anfänger es ist vollkommen OK dass das Programm ein char-Array anstatt std::string verwendet!
-
Es ist nicht vollkommen okay wenn der Lehrer ne willkürliche Mischung aus C und C++ unterrichtet und nicht erklärt warum.
EDIT: Im übrigen fehlt dem OP ein Include für strlen

-
N3Ro205 schrieb:
warum sollten da fehler drinne sein? das Programm wurde mir so von einem Lehrer präsentiert und es lief einwandfrei!!!
1. Die Fehler bezogen sich auf den Code von GPC.
2. Dein Lehrer vermischt C mit C++ Code. In C++ wird nunmal die Klasse String anstelle der char Arrays verwendet.
3. Das Programm ist von der Logik her falsch:
Eingabe:
ein test-suchen nach e
Ausgabe:
Satz besteht aus 8 Zeichen, tatsächlich aber nur aus 7 (Space!)
Das Zeichen e kommt 1 mal vor, komisch, denn es kommt ja zweimal vor, oder? (Habe ich am Beginn auch übersehen, Laufvariable der Schleife wird falsch initiiert!)
-
Wenn du schon richtiger Weise anmerkst, dass man in C++ String verwendet, dann ist strlen() nicht konsequent und wird darüber hinaus mit einem Fehler bestraft: 'strlen': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich
Es war spät, ich war müde, manchmal vergisst man sowas halt

OMFG schrieb:
Er ist Anfänger es ist vollkommen OK dass das Programm ein char-Array anstatt std::string verwendet!
Sehe ich anders, imho ist ein std::string viel einfacher zu benutzen, als sich mit char Arrays rumzuschlagen. std::strings sind komfortabler, immer.
Wer grundsätzlich char-Arrays verwenden will, soll C programmieren gehen.
MfG
GPC