2012-07-30 81 views
73

我有下面的代码:如何使用字符串流分离逗号分隔字符串

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

string token; 

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

输出是:

ABC
DEF,GHI

所以stringstream::>>运算符可以按空格分隔字符串,但不能用逗号分隔。无论如何修改上面的代码,以便我可以得到以下结果?

输入: “ABC,DEF,GHI”

输出
ABC
DEF
GHI

+3

[拆分在C++字符串(http://stackoverflow.com/questions/236129/splitting- a-string-in-c)包含人类应该知道的关于C++中splittin字符串的所有内容。 – pmr 2012-07-30 10:27:49

回答

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
个 高清
GHI

-1

也许这个代码将帮助您:

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

输入字符串是逗号分隔的字符串,而不是用逗号分隔的整数。在'ss >> a'中,a也没有被声明.. – yoneal 2017-03-08 10:09:42

+0

整数永远不会被定义... – cujo 2017-10-28 20:29:28

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

“*给一个男人一条鱼,你喂他一天;教一个男人去钓鱼,你喂他一个一生*”。 – Mistalis 2017-03-22 08:22:47