Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] Acquisire line

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    41

    [C++] Acquisire line

    Non riesco bene ad usare getline (o almeno penso vada usato quello).

    Stavo ripassando l'utilizzo delle stringhe e ho provato a risolvere un esercizio di Stroustup (5.11)
    mi chiede in pratica di acquisire un tot di stringhe (e di fermare la procedura con Quit), poi farne un print unsorted ed uno sorted. Con il codice qui riportato va tutto bene tranne che se inserisco gli spazi le considera giustamente stringhe separate incontrando \0. Come posso fare?

    codice:
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    
    
    
    
    int main(int argc, char* argv[]) {
        //variables
        int i=0;
        std::string Istring;
        std::vector<std::string> StringList;
        std::vector<std::string>::iterator iter, iterUnique;
        std::cout << "Insert some strings. Type 'Quit' to exit: \n\n";
        //read strings
        do{
            std::cout << "\t";
            std::cin >> Istring;
            StringList.push_back(Istring);
        }while(StringList.back() != "Quit");
        //Cancel Quit from vector    
        StringList.pop_back();
        //Print unsorted words
        std::cout << "\nUnsorted submitted words:\n";
        for(iter = StringList.begin();iter != StringList.end();iter++) {
            std::cout << "\t" << *iter << std::endl;
        }
        //Print sorted words
        std::cout << "\nSorted submitted words:\n";
        std::sort(StringList.begin(),StringList.end());
        iterUnique = std::unique(StringList.begin(),StringList.end());
        for(iter = StringList.begin();iter < iterUnique; iter++) {
            std::cout << "\t" << *iter << std::endl;
        }
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se vuoi acquisire linee senza problemi usa sempre std::getline() ed evita gli operatori >> del cin (causano più problemi di quanti ne risolvano).
    codice:
    do{
            std::cout << "\t";
            std::getline(std::cin, Istring);
           StringList.push_back(Istring);
    }while(StringList.back() != "Quit");
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    41
    Quote Originariamente inviata da shodan Visualizza il messaggio
    Se vuoi acquisire linee senza problemi usa sempre std::getline() ed evita gli operatori >> del cin (causano più problemi di quanti ne risolvano).
    codice:
    do{
            std::cout << "\t";
            std::getline(std::cin, Istring);
           StringList.push_back(Istring);
    }while(StringList.back() != "Quit");
    Grazie mille shodan. Mi ricordavo di dover usare getline ma cercavo di utilizzare il metodo di std::cin invece che di std::string. Thx.

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.