zykluslänge bestimmen(leider wird nur leerzeile ausgegeben)
-
Hallo Leute,
meine Aufgabestellung ist folgende und wenn ich meinen Code ausführe wird leerzeile ausgegeben. gibt es allgemeinere weg oder ist das auch ok?
**Schreiben Sie eine Funktion, die prüft, ob eine eingegebene Zeichenkette aus einer zyklischen Aufeinanderfolge einer Teilzeichenkette besteht, gegebenenfalls die (minimale) Zykluslänge bestimmt und an die aufrufende Funktion retourniert z.B.:
Eingabe: abcabca Ausgabe: Zykluslänge 3
Eingabe: abcabcd Ausgabe: nicht zyklisch
**#include <iostream> using namespace std; void zyklish(char *c1) { char *c2 = c1; int zaehlen = 1; bool zyklish = true ; while(*(c1+1) != *c2){ zaehlen = zaehlen +1; c1 = c1 +1; } while(*c1 != '\0'){ if(*c1 == *(c1+zaehlen)){ zyklish = true; c1 = c1+1; }else{ zyklish =false; return; } } if(zyklish == true) cout << "ist zyklish mit laenge "<< zaehlen; else cout << "nicht zyklish"; } int main() { char ch[]= "abcabcabca"; zyklish(ch); cout << endl; return 0; }
-
darauf, dass nichts ausgegeben wird lag an return. Damit bin ich auf der Funktion rausgekommen
algoritmisch schaut richtig aus, warum wird am ende else teil ausgegeben?
#include <iostream> using namespace std; void zyklish(char *c1) { char *c2 = c1; char *c3 = c1; int zaehlen = 1; bool zyklish =true ; while(*(c3+1) != *c2){ zaehlen = zaehlen +1; c3 = c3 +1; } while(*c1 != '\0'){ if(*c1 == *(c1+zaehlen)){ zyklish = true; c1 = c1+1; }else{ zyklish =false; break; } } if(zyklish == true) cout << "ist zyklish mit laenge "<< zaehlen; else cout << "nicht zyklish"; } int main() { char ch[]= "abcabcabca"; zyklish(ch); cout << endl; return 0; }
-
hat sich erledigt
#include <iostream> using namespace std; void zyklish(char *c1) { char *c2 = c1; char *c3 = c1; int zaehlen = 1; bool zyklish =true ; while(*(c3+1) != *c2){ zaehlen = zaehlen +1; c3 = c3 +1; } while(*(c1+zaehlen) != '\0'){ if(*c1 == *(c1+zaehlen)){ zyklish = true; c1 = c1+1; }else{ zyklish =false; break; } } if(zyklish == true) cout << "ist zyklish mit laenge "<< zaehlen; else cout << "nicht zyklish"; } int main() { char ch[80] ; cin >> ch; zyklish(ch); cout << endl; return 0; }