Corso Online per Potenziare le Competenze Digitali
Arianna aveva appena terminato di scrivere una relazione, quando nel fare copia-incolla del testo, il tasto V della tastiera, responsabile dell’incollamento del testo, si è incastrato.
Per questo, in pochi secondi, Arianna ha incollato moltissime copie dello stesso testo.
La relazione è da consegnare domani, e il programma di videoscrittura che Arianna sta utilizzando non permette di annullare il cambiamento effettuato.
Aiuta la ragazza a determinare quale era il testo originale, ovvero quale è la più corta stringa s di cui il testo di Arianna è ripetizione.Dati di input
Il file input.txt è composto da una riga, corrispondente alla situazione attuale del testo di Arianna.
La riga di testo può contenere spazi, lettere minuscole e maiuscole (dalla a alla z).Dati di output
Il file output.txt è composto da un’unica riga contenente il testo originale che Arianna intendeva incollare.
Assunzioni
- La lunghezza della riga di testo in input non supera i 1000 caratteri (se si usano gli array di char, fare attenzione ad allocare spazio sufficiente per il carattere terminatore!).
- Non sono mai presenti spazi ai margini del testo in input.
Esempi di input/output
input.txt output.txt ciaociaociao ciao amo le roseamo le rose amo le rose
/* www.valcon.it Corso Online per Potenziare le Competenze Digitali Copia - Incolla */ #include#include #include // compare() - length() - substr() using namespace std; int main() { ifstream fin ( "input.txt"); ofstream fout("output.txt"); string s; getline(fin, s); int n=s.length(); int risposta=0; string sottostr; for(int i=1; i <= n/2; i++) { if(n%i == 0) { risposta=1; sottostr=s.substr(0,i); int volte=n/i; for(int j=1; j < volte; j++) if(s.compare(j*i,i,sottostr)) { risposta=0; break; } if(risposta) break; } } fout << sottostr; return 0; }