Dans votre cas, il suffit d'utiliser getline
de la même manière que vous le faites dans la boucle extérieure:
while(getline(tokenizer, token, ','))
Alors que le plus probable que je ferais quelque chose comme ceci:
while(std::getline(read,line)) { // read line by line
std::replace(line.begin(), line.end(), ',', ' '); // get rid of commas
std::istringstream tokenizer(line);
int number;
while(tokenizer >> number) // read the ints
std::cout<<number<<std::endl;
}
Et deux autres alternatives - qui utilisent Boost.
String Algorithms:
#include <boost/algorithm/string.hpp>
...
std::vector<std::string> strings;
boost::split(strings, "1,3,4,5,6,2", boost::is_any_of(","));
ou tokenizer:
#include <boost/tokenizer.hpp>
typedef boost::char_separator<char> separator_t;
typedef boost::tokenizer<separator_t> tokenizer_t;
...
tokenizer_t tokens(line, sep);
for(tokenizer_t::iterator it = tokens.begin(); it != tokens.end(); ++it)
std::cout << *it << std::endl;
Si vous prévoyez de rencontrer int
non, des caractères non-séparation, par exemple 1 3 2 XXXX 4
. Ensuite, vous devrez décider quoi faire dans un tel cas. tokenizer >> number
s'arrêtera à quelque chose qui n'est pas int
et les indicateurs d'erreur istringstream
seront définis. boost::lexical_cast
est aussi votre ami:
#include <boost/lexical_cast.hpp>
...
try
{
int x = boost::lexical_cast<int>("1a23");
}
catch(const boost::bad_lexical_cast &)
{
std::cout << "Error: input string was not valid" << std::endl;
}
Enfin, vous avez 11 les fonctions stoi/stol/stoll C: de
#include <iostream>
#include <string>
int main()
{
std::string test = "1234";
std::cout << std::stoi(str) << std::endl;
}
Ce code imprime un seul numéro ...... – howtechstuffworks
@howtechstuffworks: Fixe, Désolé. – Anonymous