赞
踩
c++ 利用stringstream和getline分割字符串,其中stringstream 是c++提供的串流。
首先了解c++中的输入输出流:
cin+流提取运算符>> 实现输入
cout + 流插入运算符<< 实现输出
定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。
在执行cout语句时,先把插入的数据存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl("\n",此时将缓冲区中已有的数据一起输出,并清空缓冲区。
cin从输入流中根据变量的类型提取相应长度的字节。
fstream…
stringstream–串流 #include
stringstream stream; //定义串流
int a,b;
stream<<"80"; //将一个字符串输出到串流里面
stream>>a; //根据变量类型从串流中提取相应长度的字节
cout<<a<<endl;
运行结果:80
注意:clear()重置流的标志状态 str()清空流的内存缓冲
stringstream stream; //定义串流
int a,b;
stream<<"80"; //将一个字符串输入到串流里面
stream>>a; //根据变量类型从串流中输出相应长度的字节
cout<<a<<endl;
//stringstream 重复使用时 需要清空
//stream.clear()清空标志位,并没有释放内存
//stream.str("") 释放stringstream的内存
//stream.str(const string& s) 将stringstream中的内容替换为s
stream<<"90";
stream>>b;
cout<<b<<endl;
getline()的原型是istream& getline ( istream &is , string &str , char delim );其中 istream &is 表示一个输入流,可用cin或stringstream,遇到字符delim停止读入
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; }
155:最小栈的实现
最容易想到的是借助最小值辅助栈实现
(1)辅助栈:和主栈同步(push pop)更新栈
(2)辅助栈:最小值变化时才push和pop
(3)不使用辅助栈:
public:
typedef long long LL;
private:
stack<LL> st; //栈用来记录当前值与最小值的差值 diff
LL minNum; //始终用来更新最小值
/*入栈时的差值:指的是当前值与当前最小值的差值 之后再更新最小值*/
//注意上述逻辑
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。