156 votes

Comment utiliser stringstream pour séparer des chaînes de caractères séparées par des virgules ?

J'ai le code suivant :

std::string str = "abc def,ghi";
std::stringstream ss(str);

string token;

while (ss >> token)
{
    printf("%s\n", token.c_str());
}

La sortie est :

abc
def,ghi

Ainsi, le stringstream::>> peut séparer les chaînes de caractères par un espace mais pas par une virgule. Est-il possible de modifier le code ci-dessus afin d'obtenir le résultat suivant ?

entrée : "abc,def,ghi"

sortie :
abc
def
ghi

309voto

jrok Points 30472
#include <iostream>
#include <sstream>

std::string input = "abc,def,ghi";
std::istringstream ss(input);
std::string token;

while(std::getline(ss, token, ',')) {
    std::cout << token << '\n';
}

abc
def
ghi

4voto

Kish Points 49
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    std::string input = "abc,def,   ghi";
    std::istringstream ss(input);
    std::string token;
    size_t pos=-1;
    while(ss>>token) {
      while ((pos=token.rfind(',')) != std::string::npos) {
        token.erase(pos, 1);
      }
      std::cout << token << '\n';
    }
}

0voto

Desolator Points 3765

Utilisez istream& getline (char* s, streamsize n, char delim );

Comme ça :

char str[SIZE];
stringstream ss;
ss.getline(str, SIZE, ',');
string token(str);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X