Salve a tutti![]()
Ho un problema con un esercizio in C. In breve, devo creare una funzione con prototipo int strperiod(char *str) che ritorna la lunghezza del più breve periodo della stringa. Una stringa ha periodo k se è uguale alla concatenazione di una o più ripetizioni di una stringa di lunghezza k. Ad esempio, la stringa "ciaociao" ha periodo 4 ed anche 8 ma la funzione restituisce 4 perché è il periodo più breve; la stringa "01010101" ha periodo 2, 4 e 8 ma la funzione ritorna soltanto 2 per lo stesso motivo. In generale, una stringa ha periodo almeno pari alla sua lunghezza: ad esempio, la stringa "periodo" ha periodo 7 perché non esiste una sottostringa che si ripete almeno una volta.
Spero di avervi fornito una spiegazione sufficientemente chiara.
Ora, devo implementare questa funzione con l'aritmetica dei puntatori e allora ho pensato a questa soluzione che però non funziona. Per favore, qualcuno mi dia una mano...
codice:int strperiod(char *str) { int offset = 0; int period = 0; while (*str != *(++str) && *str != '\0') { offset++; } char *j = str + offset; while (*str != '\0') { if (*str == *j) period++; str++; } return period; }

Rispondi quotando