2012-07-30 32 views
73

Tôi đã có đoạn mã sau:Làm thế nào để sử dụng stringstream để tách dấu phẩy chuỗi tách

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

string token; 

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

Đầu ra là:

abc
def, writing

Vì vậy, toán tử stringstream::>> có thể phân tách các chuỗi theo dấu cách chứ không phải bằng dấu phẩy. Có anyway để sửa đổi mã trên để tôi có thể nhận được kết quả sau đây?

đầu vào: "abc, def, writing"

đầu ra:
abc
def
writing

+3

[Chia một chuỗi trong C++] (http://stackoverflow.com/questions/236129/splitting- a-string-in-c) chứa mọi thứ con người cần biết về chuỗi splittin trong C++ – pmr

Trả lời

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
writing

-1

Có lẽ mã này sẽ giúp bạn:

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

Chuỗi đầu vào là một chuỗi được phân cách bằng dấu phẩy, không phải là các số nguyên được phân tách bằng dấu phẩy. Trong 'ss >> a', a cũng không được khai báo .. – yoneal

+0

số nguyên không bao giờ được xác định ... – 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

" * Cho một người đàn ông một con cá và bạn cho anh ấy ăn một ngày; dạy một người đàn ông để câu cá và bạn nuôi anh ta cho một cả đời*". – Mistalis