知识点:
istream& getline ( istream& is, string& str, char delim )与istream& getline ( istream& is, string& str );
第一个参数是输入流,可以是:cin、stringstream、istringstream
第二个参数存放从输入流中读出的字符串:string类型
第三个参数(默认是空格):
调用者指定的分隔符,读到调用者指定的分隔符时,此时将分隔符之前的字符拷贝到缓冲区中,但分隔符本身不拷贝进去,并且下次读操作将从分隔符后的下一个字符开始。
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
using namespace std;
void myreplace(string &str, char a, string b)
{
int len = str.size();
for (int i = 0; i < len; i++)
{
if (str[i] == a)
{
str.replace(i, 1, b);
len = str.size();
}
}
}
int main()
{
string sin1;
stringstream ss1;
stringstream ss2;
double num=100.2222;
getline(cin, sin1);//特别注意,getline的用法
sin1 += " bi add ";
ss2 << num; //利用stringstream将所有的基础数据类型,装换成字符串( ss2.str() )
sin1 += ss2.str();
cout << sin1 << endl;
ss1.clear();
ss1.str("");
ss1.str(sin1);//利用stringstream,将字符串根据空格切割成字符串、基础数据类型
int a;
double b;
string s;
ss1 >> a >> s >> s >> b; //将stringstream包含的对象按照,空格进行切割
cout << a << endl;
cout << b << endl;
string str = "11,22,33,44,55";//对于不是用空格进行分割的字符串,首先自己定义函数,将逗号替换成空格
cout << str << endl;
myreplace(str,',', " ");//自己定义的函数,替换成空格,就可以切割包含的数字了
cout << str << endl;
vector<string> vec;
string temp;
string str3 = "11,22,33,44,55";//利用getline+stringstream切割用‘,’分割的字符串
stringstream ss3(str3);
while (getline(ss3, temp, ','))
{
vec.push_back(temp);
}
system("pause");
return 0;
}