Problem mit dem Thema Funktionen!
-
Also ich bin noch ein echter C++ Anfänger und habe ein Problem.
Ich möchte ein Porgramm schreiben mit einer rekursiven Funktion, das eine Zeichenkette einließt und ein Zeichen. Danach soll gesucht werden ob das Zeichen in der Zeichenkette vorkommt, ohne Verwendung einer Schleife.
Ich habe dieses Programm geschrieben, aber es funktioniert nicht.#include <iostream>
using namespace std;
char kette[80];
char zeichen;
bool fkt(int kette, char zeichen) {
if (kette!=zeichen) return false;
else return true;
kette++;
}
int main () {
cout << " Bitte geben Sie die Zeichenkette ein: ";
cin >> kette;
cout << " Bitte geben Sie das Zeichen ein: ";
cin >> zeichen;
if (!fkt(kette,zeichen))
cout << " Das Zeichen kommt in der Zeichenkette nicht vor";
else
cout << " Das Zeichen " << zeichen << " kommt in der Zeichenkette vor ";
return 0;
}Es kommt immer eine Fehlermeldung: Invalid conversation
Ich wäre sehr dankbar, wenn mir jemand helfen könnte.
Vielen Dank im Vorraus.
-
kirchi123 schrieb:
bool fkt(int kette, char zeichen) {
if (kette!=zeichen) return false;
else return true;
kette++;
}Das ist so auch noch keine rekursive funktion.
Eine Rekursive funktion ruft sich selbst auf, deine gibt aber lediglich
true oder false zurück anstatt sich selbst nochmals aufzurufen um den
nächsten Wert in kette zu überprüfen.An die Stelle kette++ kommt dein Programm nie, da du immer vorher schon
mit return die funktion beendest.
-
Benutz in Zukunft CPP-Tags.
Ich hab einige Fehler mal auskommentiert:kirchi123 schrieb:
#include <iostream> using namespace std; char kette[80]; char zeichen; bool fkt(int kette, char zeichen) { if (kette!=zeichen) return false; // du überprüfst hier ob das Zeichen gleich ist wie die ganze Kette. // Das kann ja nicht true sein, zumal kette ein Array repräsentiert. else return true; kette++; // wird niemals ausgeführt, da bereits ein Wert zurückgegeben wurde. } // Eine Funktion ist erst dann rekursiv, wenn sie sich selber aufruft (was deine aber nicht tut). int main () { cout << " Bitte geben Sie die Zeichenkette ein: "; cin >> kette; cout << " Bitte geben Sie das Zeichen ein: "; cin >> zeichen; if (!fkt(kette,zeichen)) cout << " Das Zeichen kommt in der Zeichenkette nicht vor"; else cout << " Das Zeichen " << zeichen << " kommt in der Zeichenkette vor "; return 0; }Ich würd dir allerdings nicht empfehlen, eine rekursive Funktion zu schreiben, nur um Schleifen zu vermeiden. Die Performance ist schlechter, es kann bei grossen Rekursionstiefen zu Stack-Überläufen kommen, zudem muss auch mehr Code geschrieben werden.
Ich hab trotzdem mal eine Möglichkeit aufgeschrieben (ich habs nicht getestet, hoffe es hat keine Fehler drin):bool fkt(int kette[80], char zeichen, int index = 0) { if (kette[index] != zeichen) { index++; if (index == 80) return false; fkt(kette, zeichen, index); } else return true; }