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;
    	}
    

Anmelden zum Antworten