Ciao,
suppongo che anche tu stia facendo gli homework del corso di fondamenti di programmazione
Io non sto ancora facendo questo,quindi la soluzione gia' fatta con cui confrontare non ce l'ho,
pero' ho notato alcune cose nel tuo codice che a prima vista non mi sono molto chiare,e qualche errore che intanto potrebbe essere corretto.
Il primo dubbio e' sul primo while
codice:
while (*str != *(++str) && *str != '\0') {
offset++;
}
cosa avrebbe dovuto fare?
Cosi com'e',l'unica cosa che fa e' controllare se un carattere e' uguale al successivo.
Quindi se io scrivessi come stringa "ciao" all'uscita avrei un offset di 3,mentre se io scrivessi qualsiasi cosa che comincia con due lettere uguali,tipo "aassddfgdfg" mi uscirebbe al primo controllo dandomi un offset di 0.
Se quello che volevi era che il ciclo uscisse quando incontra un carattere uguale al primo a prescindere dalla distanza tra essi,la soluzione piu semplice che mi viene in mente e' di creare un secondo puntatore char uguale a str,e riscrivere il ciclo cosi
codice:
char *str2=str;
while (*str != *(++str2) && *str2 != '\0') {
offset++;
}
inizializzerei anche l'offset a 1 invece che a 0,cosi se come stringa inserissi "asdasd" in uscita mi dara' un offset di 3,in modo tale che nell'inizializzazione di j la faccia puntare alla quarta lettera.
Il problema principale pero' secondo me e' che stai sbagliando l'approccio al problema,devi tener conto che per avere un offset giusto devi gia sapere quanto e' lungo il periodo minimo all'interno della stringa,e di conseguenza devi gia aver risolto il tuo problema.
Ti faccio un esempio,se io inserissi come stringa "asdaseasdase" il sottoperiodo della stringa e' 6,ma col controllo che faresti tu ti darebbe un offset puntante alla prima a che incontra,e nel secondo while non sarebbe in grado di riconoscere il sottoperiodo giusto.
Insomma secondo me il secondo while non ti serve,sistema tutto nel primo e in uscita da esso l'offset ti dara' la lunghezza del periodo minimo.
Ricorda anche che nonostante stai lavorando coi puntatori,se hai bisogno di controllare il carattere successivo non hai bisogno di fare str++,puoi scrivere str[i+1],e' perfettamente legittimo e ti risparmia problemi a mio parere.
Scusami se non ti scrivo la soluzione esatta ma come gia detto non ci ho ancora lavorato,spero pero' di esserti stato un minimo d'aiuto xD
ciau