Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c++] string

  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [c++] string

    ciao a tutti...

    mi interesserebbe suddividere in token, diciamo così, una string letta da console in questo modo: se un utente inserisce come stringa "ciao a tutti\n" (ho scritto \n per indicare che viene effettuato il ritorno carrello) vorrei intanto smettere di leggere quando trova lo \n (questo si puo' fare con la funzione getline() ) e poi vorrei poter ottenere "ciao" "a" "tutti", possibilmente ottenendo anche il numero dei token che ho ho ottenuto per controllare che ad esempio la sintassi sia corretta...

    in parole povere vorrei una funzionalità come quella che si ha utilizzando gli argomenti del main: se scrivo program.txt ciao pippo, ottengo un vettore con i vari token e il numero degli argomenti... io vorrei la stessa cosa, solo che leggo da console.

    potete darmi una mano?

    vi ringrazio

  2. #2
    codice:
    char *string = "ciao a tutti";
    char *token = NULL;
    
    token = strtok(string, " ");
    puts(token);
    
    while((token = strtok(NULL, " ")) != NULL){
       
       puts(token);
       
    }
    oppure:
    codice:
    stringstream ss;
    
    ss << "ciao a tutti";
    
    while(!ss.eof()){
       
       string token;
       
       ss >> token;
       
       cout << token << std::endl;
       
    }

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    innanzitutto grazie per la risposta!

    nel primo codice, non ho ben chiaro cosa faccia la "puts()"...

    per questo avevo provato col secondo, solo che dovrei riadattarlo, in quanto la stringa "ciao a tutti" la deve prendere da console (e il cin salta gli spazi.. ho provato con cin.get() con scarsi risultati..)

    che ne dici?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Kilin
    non ho ben chiaro cosa faccia la "puts()"...
    E' una semplicissima funzione che visualizza il contenuto di una stringa a partire dal suo puntatore ...

    http://www.cplusplus.com/reference/c...tdio/puts.html
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da Kilin
    (e il cin salta gli spazi.. ho provato con cin.get() con scarsi risultati..)
    Originariamente inviato da Kilin
    (questo si puo' fare con la funzione getline() )
    Che problema c'è?
    codice:
    std::string line;
    std::getline(std::cin,line);
    stringstream ss(line);
    ecc...

  6. #6
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    si, avevo risolto anche io così

    grazie!

  7. #7
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    Originariamente inviato da menphisx
    codice:
    char *string = "ciao a tutti";
    char *token = NULL;
    
    token = strtok(string, " ");
    puts(token);
    
    while((token = strtok(NULL, " ")) != NULL){
       
       puts(token);
       
    }
    oppure:
    codice:
    stringstream ss;
    
    ss << "ciao a tutti";
    
    while(!ss.eof()){
       
       string token;
       
       ss >> token;
       
       cout << token << std::endl;
       
    }
    scusate una cosa, funziona tutto, ma rileggendo non ho ben chiaro questa parte:

    codice:
      
       
       ss >> token;
    che cos'è che faccio qui?

    EDIT: forse ho capito: lo stream ss è pieno perchè ci ho scritto, usando l'operator >> cerco di leggere di nuovo e mettere in token il risultato, ma lo stream è pieno e quindi sfruttando anche il fatto che l'operator >> come sul cin "tokenizza" per spazi, suddivido lo streamo in questo modo?

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.