Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157

    [C++] identificare il tabulatore

    Ho uno script che legge un file di testo e restituisce ciàò che legge dividendo le parole singolarmente in base agli spazi. Questo file di testo è diviso in 3 parti tramite dei tab, ora vorrei che invece di separarmi il file parola per parola identificasse il tab per separare il file nel modo corretto.

    questo è ciò che ho fatto:
    codice:
    #include <string>
    #include <fstream>
    #include <vector>
    #include <iostream>
    
    int main() {
    	vector<string> parola;
    	ifstream in("postit.txt");	   //Apro la lettura del file
    	string linea;
       while(in >> linea)
           parola.push_back(linea);
           for(int i = 0; i < parola.size(); i++)
           //cout << parola.size() << endl;
           cout << parola[i] << endl;
    
    //ofstream out("testo.txt");	//Apro il file in scrittura
    	}

  2. #2
    se non ricordo male la tabulazione è il carattere '\t', quindi potresti tirare su tutto quello che trovi fino alla tabulazione usando il metodo get sullo stream

    in.get(stringa di output, max caratteri, '\t' <-- carattere sentinella);

    Prova così, ma controlla sulla guida il metodo get perchè è una vita che non lo uso.
    WWW.UTMIB.COM site and forum administrator
    www.utmib.com/forum
    Unreal Tournament Men In Black Clan

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    usa questo getline qui:

    codice:
    ...
    getline(in,linea,'\t');
    ...
    Lo metti dentro il ciclo while al posto di in >> linea

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Occhio pero' che il getline si ferma sempre e comunque all'endline. Il get invece tira dritto fino alla tabulazione o al max di caratteri prefissato.

    Provale... sono entrambe buone.
    WWW.UTMIB.COM site and forum administrator
    www.utmib.com/forum
    Unreal Tournament Men In Black Clan

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ha ragione feua, getline prende cmq il fine linea.

    Ti ho consigliato getline xhè get come parametro prende un char*, ma tu stavi usando un oggetto string.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Originariamente inviato da netarrow
    ha ragione feua, getline prende cmq il fine linea.

    Ti ho consigliato getline xhè get come parametro prende un char*, ma tu stavi usando un oggetto string.


    vero anche quello
    WWW.UTMIB.COM site and forum administrator
    www.utmib.com/forum
    Unreal Tournament Men In Black Clan

  7. #7
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157
    Scusatemi se ancora ci sto
    Facendo come mi dice Netarrow mi scrive solo l'ultimo delimitatore, mentre facendo come ha scritto feua ricevo degli errori. Quindi rileggendo il manuale di C++ ho visto che il getline è spesso abinato allo iostream, quindi l'istruzione suggerita è:

    std::string s;
    while (getline(std::cin,s)) { //for each line read from cin
    ...
    }
    mentre io non leggendo dal cin:

    codice:
    std::string linea;
    while (getline(std:: linea,'\t'));
    parola.push_back(linea);
    al momento della compilazione ricevo il seguente errore:
    Error: lettura.cpp, line 13: namespace "std" has no member "linea" while (getline(std:: linea, '\t'));

    mettendo ^ posto sotto la "l" di linea.


  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Shea
    while (getline(std:: linea,'\t'));
    parola.push_back(linea);
    [/CODE]

    al momento della compilazione ricevo il seguente errore:
    Error: lettura.cpp, line 13: namespace "std" has no member "linea" while (getline(std:: linea, '\t'));

    mettendo ^ posto sotto la "l" di linea.

    std:: linea

    fa credere al compilatore che vuoi accedere a linea presente dentro std.

    Per evitare questi equivoci dichiara all'inizio

    codice:
    ...
    using namespace std;
    ...
    Una volta aggiunto quello non serve specificare std:: basta scrivere subito il membri a cui vuoi accedere:

    codice:
    ...
    while (getline(cin ,linea, '\t'));
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157
    Originariamente inviato da netarrow
    Per evitare questi equivoci dichiara all'inizio

    codice:
    ...
    using namespace std;
    ...
    Ehm, già c'era!

  10. #10
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Shea
    Ehm, già c'era!
    allora non serviva scrivere std::

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.