1、int 与 string 类型的相互转化
在自定义函数中 要转化为的类型写成引用形式
#include <iostream>
#include <string>
#include <sstream> // stringstream所在头文件
using namespace std;
void trans(int num,string &str) // int转stirng
{
stringstream ss;
ss << num;
ss >> str;
}
void zhuan(string str, int &num) // string转int
{
stringstream ss;
ss << str;
ss >> num;
}
int main()
{
int a=3456;
string s;
trans(a, s);
cout << s << endl << s[1] << endl;
string s1="2345";
int b;
zhuan(s1, b);
cout << b << endl;
return 0;
}
/*
输出结果
3456
4
2345
*/
2、string 转char
ss.clear();//清空流
ss.str("");//清空流缓存
如果在一个函数中通过使用同一stringstream对象实现多种类型的转换,
请注意在每一次转换之后都必须调用clear()成员函数。
int main()
{
stringstream ss;
//--------int转string-----------
int a = 100;
string str;
ss << a;
ss >> str;
cout << str << endl;
//--------string转char[]--------
ss.clear();
string name = "yxc yyds";
char cname[20];
ss << name;
ss >> cname;
cout << cname;
}
3、clear() 与 str(“”)
在对同一个stringstream对象重复赋值,就需要先对流使用clear()函数清空流的状态,此时流占用的内存没有改变,会一直增加(stringstream不主动释放内存),若想改变内存(一般是清除内存,减少内存消耗),需要再配合使用str(“”)清空stringstream的缓存。
stringstream stream;
int a,b;
ss << "80"; //向流输出数据(写入)
ss >> a; //从流输入数据到a
cout << "Size of ss = " << ss.str().length() << endl;
//ss.str()返回一个string对象,再调用其成员函数length()
ss.clear(); //清空流
ss.str(""); //清空流缓存
cout << "Size of ss = " << ss.str().length() << endl;
ss << "90"; //重新赋值
ss >> b;
cout << "Size of ss = " << ss.str().length() << endl;
cout << a << endl << b;
运行结果:
Size of ss = 2
Size of ss = 0
Size of ss = 2
80
90
4、stringstream 与 sscanf 的使用
(1)ssin 就相当于 cin,只不过 ssin 是从string字符串 s 中读出任意你想要的类型和内容到相关变量里,完成转化
====================================================================================================
(2)ssanf 与 ssin 同理 但它作用于 char 类型的字符数组
====================================================================================================
(3)不知道数量时循环读入用 stringstream
while (ssin >> a) cout << a;