stringstream:
头文件:
#include <sstream>
简单整理一下这玩意的作用,主要有三个吧.
- 类型转化
- 字符串拼接
- 字符串整合(这一个用处特别大!!!!!!!)
先插个话,赋值语句:(这是个 流 的东西其实也不能叫赋值语句)
1 string str; 2 stringstream ss; 3 str = "123.456789"; 4 ss << str; 5 6 7 //和stringstream ss(str); 是一样的
一.类型转化
1.字符串转数字
1 double dVal; 2 int iVal; 3 string str; 4 stringstream ss; 5 6 // string -> double 7 str = "123.456789"; 8 ss << str; 9 ss >> dVal; 10 cout << "dVal: " << dVal << endl; 11 12 // string -> int 13 str = "654321"; 14 ss.clear();//一定别忘记清空! 15 ss << str; 16 ss >> iVal; 17 cout << "iVal: " << iVal << endl; 18 19 return 0;
2.数字转字符串
1 void i2s(int num,string &str){ 2 stringstream ss; 3 ss<<num; 4 ss>>str; 5 }
注意一个问题,要进行多次转换的时候,要对原来那个进行清空
.clear() 或者 .str(" ");
(刚刚have a try,发现还是第一个比较好用)
二.字符串拼接(其实这个功能,放string里+一下就行了)
1 int main()
2 {
3 stringstream sstream;
4
5 // 将多个字符串放入 sstream 中
6 sstream << "first" << " " << "string,";
7 sstream << " second string";
8 cout << "strResult is: " << sstream.str() << endl;
9
10 // 清空 sstream
11 sstream.str("");
12 sstream << "third string";
13 cout << "After clear, strResult is: " << sstream.str() << endl;
}
//sstream.str()可以导出在sstream中的所有东西
三.分割
这里不得不提一个叫getline 的东西,这个东西默认是不会读到空格停止的.看这个吧:https://www.cnblogs.com/zhmlzhml/p/12669967.html
getline不会因空格而停止(一读读一行)但是输入输出流会(包括伟大的cin),两者配合,可以成功实现单词的分割
#include<sstream> #include<iostream> using namespace std; int main() { string line,word; while(getline(cin,line)) { stringstream stream(line); cout<<stream.str()<<endl; while(stream>>word){cout<<word<<endl;}//挨个出去 } return 0; }