Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C++] Leggere il primo carattere di ogni stringa FILE DI TESTO

    Ciao ragazzi, premetto che ho fatto delle ricerche e ho trovato istrunzioni del tipo "getline(f1,buffer)".
    Il mio problema è:
    Contare quante righe del primo file di testo hanno il primo carattere uguale al primo carattere della riga corrispondente del secondo file.
    Ho cercato di risolverlo così (avendo dichiarato un contatore int cont=0; )
    while(f1.getline(line1,luns,'\n')&&f2.getline(line 2,luns,'\n') //luns è la lunghezza max della riga
    if(f1.get(c1)==f2.get(c2))// ho dichiarato c1 e c2 char
    cont++;
    c'è qualcosa che non va? In ogni caso il contatore mi viene visualizzato ad 1, qualunque siano i casi nell'esecuzione del programma e le inizializzazioni dei file.
    PS=con i file ci lavoro da poco, ho creato un codice che mi permettesse di gestire una lista di candidati alle elezioni ed è andato tutto ok. Ma su questa traccia dataci dalla prof mi sono sentito spiazzato
    Ultima modifica di BrianCooper; 10-03-2014 a 16:50

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ti conviene usare la classe string e la funzione std::getline
    In ogni caso getline non ritorna mai false, ma sempre il parametro istream&.
    Posta tutto il codice del tuo programma negli appostiti tag CODE.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    La prof ci fa usare la classe string.h... comunque il codice è questo:
    Nella funzione punto1 c'è il codice che ci interessa... i punti 2 e 3 li ho messi in commento per compilare e ho modificato la condizione nell'if... ora il cont mi torna sempre 0 e non più 1...


    //ESERCIZIO 4using namespace std;


    #include <iostream>
    #include <string.h>
    #include <fstream>


    const int luns=1000;


    void inizializza(char nomef[]);
    void visualizza(char nomef[]);
    void menu(int &scelta);
    void punto1(char nomef1[], char nomef2[]);
    //void punto2(char nomef1[], char nomef2[]);
    //void punto3(char nomef1[], char nomef2[]);


    int main(int argc, char** argv)
    {
    char nomef1[luns], nomef2[luns];
    int scelta;
    do{
    cout<<"Inserisci i nomi per file 1 e file 2"<<endl;
    cin>>nomef1>>nomef2;
    }while(strcmp(nomef1,"")==0||strcmp(nomef2,"")==0) ;
    cout<<"PRIMO FILE"<<endl;
    inizializza(nomef1);
    cout<<"SECONDO FILE"<<endl;
    inizializza(nomef2);
    do{
    menu(scelta);
    switch(scelta)
    {
    case 1: punto1(nomef1, nomef2);
    break;
    //case 2: punto2(nomef1, nomef2);
    // break;
    // 3: punto3(nomef1, nomef2);
    // break;
    }
    }while(scelta!=0);
    return 0;
    }




    void inizializza(char nomef[])
    {
    ofstream f(nomef);
    if(!f.is_open())
    cout<<"Impossibile aprire il file"<<endl;
    else
    {
    char line[luns];
    do{
    cin.getline(line,luns);
    f<<line<<endl;
    }while(strcmp(line,"fine")!=0);
    f.close();
    }
    }


    void visualizza(char nomef[])
    {
    ifstream f(nomef);
    if(!f.is_open())
    cout<<"Impossibile aprire il file"<<endl;
    else
    {
    char line[luns];
    while(f.getline(line,luns))
    cout<<line<<endl;
    f.close();
    }
    }


    void menu (int &scelta)
    {
    cout<<"1. per contare il numero delle righe del primo con la stessa iniziale della riga corrispondente del secondo"<<endl<<"2. per trasferire nel secondo le righe di posto pari"<<endl<<"3 per trasferire in un secondo file le lettere con il case invertito"<<endl;
    cin>>scelta;
    }


    void punto1(char nomef1[], char nomef2[])
    {
    ifstream f1(nomef1); ifstream f2(nomef2);
    if(!f1.is_open()||!f2.is_open())
    cout<<"ERRORE"<<endl;
    else
    {
    char c1, c2, line1[luns], line2[luns];
    int cont=0;
    while(f1.getline(line1,luns)&&f2.getline(line2,lun s))

    if(line1[0]==line2[0])
    cont++;

    cout<<"Il numero delle righe e\' "<<cont<<endl;
    f1.close(); f2.close();
    }
    }

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Usa i tag code, non quote. Comunque già dei suggerimenti te li ho dati prima.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Scusa l'ignoranza ma i tag code come li metto? Comunque la prof (a detta di un mio amico) alla lavagna avrebbe fatto così... mi sento fuori luogo perchè non ho mai avuto problemi con il c++... ci sono errori nel codice forse? Se non volessi usare la libreria string?

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non è indispensabile che usi string, ma non puoi utilizzare getline (sia metodo o funzione std::getline) come condizione del while, questo è certo. Il resto non ho voglia di leggerlo perché senza identazione e colorazione il codice è pressoché illeggibile...

    I tag code si mettono con (code)codice sorgente (/code) utilizzando le parentesi [] al posto di () oppure con l'apposito pulsante nell'editor avanzato.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    ah ok grazie mille

  8. #8
    Ho modificato il while così... il contatore rimane a 0:

    codice:
    while(f1.eof()||f2.eof())		{
    			f1.getline(line1,luns); f2.getline(line2,luns);
    			if(line1[0]==line2[0])
    				cont++;
    		}

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Con quella if non confronti due array di char ... Devi usare la funzione strcmp
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    la strcmp è per confrontare 2 stringe, per dei caratteri basta '=='

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.