Come capire quando andare a capo su file .txt

di Anonimizzato28634 il
13 risposte
Buonasera a tutti, stavo facendo un esercizio il quale prendeva come input un file .txt con 100 righe e un numero indefinito di parole ogni riga, io, dopo aver modificato ogni stringa, dovrei andare a capo ogni volta che termina il task. Il problema è che non capisco come fare, qualcuno mi sa aiutare? grazie in anticipo

13 Risposte

  • Che vuol dire "dovrei andare a capo ogni volta che termina il task"?
  • Weierstrass ha scritto:


    Che vuol dire "dovrei andare a capo ogni volta che termina il task"?
    ciao Weierstrass, scusami effettivamente non sono stato chiarissimo, vista la mia scarsa capacità di sintesi ti faccio un esempio pratico

    Io ho in input un file di txt di 100 righe ad esempio questo
    
    mamma italia francia elefante
    sicilia sardegna
    casa albero lattuga panino pesce televisione armadio
    ecc
    ecc
    
    adesso io dovrei modificare queste stringhe ad esempio togliendo le vocali, e metterle in un nuovo file di output, così
    
    mmm tl frnc lfnt
    scl srdgn
    cs lbr lttg pnn psc tlvsne rmd
    ecc
    ecc
    
    Ad implementare il metodo non ho avuto problemi, solo che l'esercizio richiede l'output nella stessa forma dell'input, per le 100 righe ho risolto con un banale for, solo che per andare a capo il discorso è un pò più complesso perchè ogni riga ha un numero diverso di parole.
    Spero adesso di essere stato più chiaro
  • Posta quello che hai fatto.

    In teoria non dovresti avere tutti questi problemi: apri l'input e l'output assieme, acquisisci la riga, tokenizzi la stringa con ' ', per ogni parola scrivi in output la trasformata seguita da spazio, quando sono finite le parole scrivi in output '\n', passi alla prossima riga e fai lo stesso finché non hai finito il file.
  • Weierstrass ha scritto:


    Posta quello che hai fatto.

    In teoria non dovresti avere tutti questi problemi: apri l'input e l'output assieme, acquisisci la riga, tokenizzi la stringa con ' ', per ogni parola scrivi in output la trasformata seguita da spazio, quando sono finite le parole scrivi in output '\n', passi alla prossima riga e fai lo stesso finché non hai finito il file.
    Il problema è che non ho sempre lo stesso input, devo fare un codice che funzioni per ogni input da 100 righe. Ti posto il mio codice, quello che devo fare è trasformare ogni parola in "alfabeto farfallino", ovvero a ogni vocale ci sarà l'aggiunta di una f interposta, ad esempio ciao diventa "cifiafaofo". Comunque come già detto il problema non è il metodo in quanto questo funziona perfettamente.
    
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    ifstream in("input.txt");
    ofstream out("output.txt");
    
    
    
    void funzione(string stringa) {
    	string parola = "";
    	int i = 0;
    	
    	while (i<stringa.length()) {
    		if (stringa[i] == 'a' || stringa[i] == 'e'||stringa[i] == 'i' || stringa[i] == 'o' || stringa[i] == 'u') {
    			parola+=stringa[i];
    			parola+='f';
    			parola+=stringa[i];
    		}
    		else 
    			parola+=stringa[i];
    		i++;
    	
    	}
    	
    	out << parola <<" ";
    	
    }
    
    
    
    int main() {
    	string ciao;
    	for (int j=0; j<100; j++) {
    		in >> ciao;
    		funzione(ciao);
    		
    
    	}
    }
    
    
    
    Io vorrei trovare un modo per chiamare la endl quando finisce la riga, ma non ho trovato nulla
  • Devi acquisire per riga
    http://www.cplusplus.com/reference/istream/istream/getline/
    con il ciclo while(cin.getline(...))
    Poi tokenizzi con ' '
    http://www.cplusplus.com/reference/cstring/strtok
    E all'interno del secondo while dei token converti la parola e la scrivi in output, seguita da spazio. Quando finisce il while dei token chiudi la riga col newline

    Sennò ci sono molte altre strade. C'è la getline versione string. Naviga un po' e sperimenta.

    P.s.: quel while che hai fatto in funzione() è più chiaro scritto come for
  • Grazie mille, effettivamente avevo letto in rete di utilizzare questa funzione, ma non avendola mai usata, e non conoscendola, mi sono un po' lasciato intimorire . Comunque domani la studierò e proverò a chiudere finalmente questo esercizio. Grazie veramente per il tuo aiuto, sei stato chiarissimo!
  • Ma non capisco una cosa


    Perche non può semplicemente leggere carattere per carattere e mandare in uscita o il carattere non modificato oppure, se fosse una vocale, elaborato come gli serve

    In questa maniera i fine riga gli 'scivolano via bene 'senza che se ne accorga
  • Scusami non capisco cosa intendi, potresti spiegarti meglio?
  • È semplice cosa intende dire. Leggi carattere per carattere e trattalo secondo le tue regole. Il carattere ritorno a capo passerà nell'outout senza problemi.
  • Io avevo provato a scorrere ogni carattere fin quando non trovavo il \n, ma non ha funzionato, come dovrei fare? sicuramente come avevo fatto io era sbagliato
  • Non hai capito. Scorri tutto fino all'Eco e tratta il \n come un qualsiasi carattere
  • oregon ha scritto:


    Non hai capito. Scorri tutto fino all'Eco e tratta il \n come un qualsiasi carattere
    Va bene ci proverò, grazie come sempre @Oregon
  • Fino all'eof
Devi accedere o registrarti per scrivere nel forum
13 risposte