C++ 使用 stringstream与getline()分割字符串

stringstream

头文件 #include
stringstream 可以使string与各种内置类型数据之间的转换,本文不做讲解
本文主要利用其流的特性;
基本语法

//输入
stringstream ss1;
ss1<< "qwe";

//输出
string str;
stringstream ss2("qwe");
ss2 >>str ;

getline()

头文件:
getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,
例如,可使用cin;
string str ; getline(cin ,str)
也可以使用 stringstream
stringstream ss("test#") ; getline(ss,str)
char delim表示遇到这个字符停止读入,通常系统默认该字符为’\n’,也可以自定义字符

字符串分割

当我们直接利用getline(),自定义字符,从cin流中分割字符,例如
输入 “one#two”

string str;		
ss << str2;
while (getline(cin, str, '#'))
	cout << str<< endl;
system("pause");
return 0;

输出结果为
one
后面的 two并没有输出
此时如果我们是用stringstream 流
例如

int main()
{
	string str;	
	string str_cin("one#two#three");
	stringstream ss;
	ss << str_cin;
	while (getline(ss, str, '#'))
		cout << str<< endl;
	system("pause");
	return 0;
}

得到的结果为

one
two
three

因此,如果我们想得到类似于split 函数的效果
可以使用 stringstream 与getline 结合的方法

c++ 实现 split

vector<string> split(string str, char del) {
	stringstream ss(str);
	string temp;
	vector<string> ret;
	while (getline(ss, temp, del)) {
		ret.push_back(temp);
	}
	return ret;
}
int main()
{
	string str_cin("one#two#three");
	vector<string> res= split(str_cin, '#');
	for (auto c : res)
		cout << c << endl;
	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章