alb3rt0 wrote:snipershady wrote:però se qualcuno ha la pazienza (visto che si parla di programmini da10 righe di codice)
di commentare i passaggi
magari gli diamo una mano
puoi farlo anche tu, visto che si parla di 10 righe di codice
il punto è ragionare e capire come trovare il suffisso!
e per farlo non serve conoscere un linguaggio di programmazione.
stringa="snipergay"
n=3
quindi il suffisso è: gay
lunghezza stringa = 9
quindi la g sarà in posizione 9 - 3 = 6
poi il codice per fare la copia diventa:
Code: Select all
i = lunghezza - n; //trovo l'inizio del suffisso
j = 0; //indice per la nuova stringa
while (stringa[i] != '\0') { //finché non trovo la fine della stringa...
stringa2[j] = stringa[i] //copio il singolo char nella nuova stringa
j++; //incremento i due indici
i++;
}
l'unica cosa complicata di questo codice è i = lunghezza - n (una sottrazione).
poi per leggere l'input, stampare l'output e la sintassi ci sono i lbri e la documentazione.
per questo suggerivo di fare l'esempio su carta.
ps: spero sia giusto

Perfetto, (ed elegante il while ha quel non sò che....)
ora white sarebbe carino porsi la domanda:
è contemplato il caso in cui la differenza lunghezza - n sia negativa?
In tal caso avresti dei problemi con l'algoritmo precedente.
Mi spiego :
stringa = snipergay
n=10
lungezza(stringa) - n = -1
questo comando qua
equivale ad eseguire stringa[-1]!='/0'
questo genera un errore di buffer overflow ( stai leggendo una porzione di memoria non assegnata alla tua variabile stringa).
Il linguaggio C non prevede nessun controllo in fase di compilazione (ne tantomeno in esecuzione) per lo sforamento dell'indicizzazione degli array (e delle stringhe) ed è per questo che riesci ad eseguirlo comunque.
In java avresti invece avuto un errore in complilazione (array outofbound exception)
Prova a riscriverlo in modo da inserire questo controllo nella condizione di verifica del while.