2012-07-30 26 views
73

que tengo el siguiente código:Cómo utilizar stringstream para separar cadenas separadas por comas

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

string token; 

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

La salida es:

abc
def, ghi

Así el operador stringstream::>> puede separar cadenas por espacio pero no por coma. ¿Hay alguna forma de modificar el código anterior para que pueda obtener el siguiente resultado?

entrada: "abc, def, ghi"

salida:
abc
def
ghi

+3

[División de una cadena en C++] (http://stackoverflow.com/questions/236129/splitting- a-string-in-c) contiene todo lo que un humano debe saber sobre las cadenas splittin en C++ – pmr

Respuesta

172
#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

-1

Tal vez este código le ayudará a:

stringstream ss(str);//str can be any string  
int integer; 
char ch; 
while(ss >> a) 
{ 
    ss>>ch; //flush the ',' 
    cout<< integer <<endl; 
}  
+2

La cadena de entrada es una cadena separada por comas, no enteros separados por comas. En 'ss >> a', a tampoco se declara ... – yoneal

+0

entero nunca se define ... – cujo

0
#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'; 
    } 
} 
+2

" * Dale a un hombre un pez y lo alimentas por un día; enséñale a pescar y lo alimentarás por un día. toda la vida*". – Mistalis

Cuestiones relacionadas