您的位置:首页 > 其它

使用stringstream 来进行string和其他类型的转换

2014-09-02 17:56 1171 查看
#include <iostream>

#include <string>

#include <sstream>

using namespace std;

int main()

{

int a, b;

string Str1, Str2;

string Input = "abc 123 bcd 456 sss 999";

//ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型

//ostringstream 只支持 << 操作符

//格式化输出

ostringstream oss;

oss << 3.14;

oss << " ";

oss << 55555555;

oss << endl;

cout << oss.str();

//double型转化为字符串

oss.str("");//每次使用前清空,oss.clear() 并不能清空内存

oss << 3.1234234234;

Str2 = oss.str();

cout << Str2 << endl;

//int型转化为字符串

oss.str("");

oss << 1234567;

Str2 = oss.str();

cout << Str2 << endl;

//istringstream 对象用来把一个已定字符串中的以空格隔开的内容提取出来

//istringstream 只支持 >> 操作符

istringstream iss(Input);//通过构造函数对istringstream类进行赋值,可以将一个字符串变量的值传递给istringstream对象

//若传入的字符串是常量,也可以进行如下赋值

//iss.str("ccc 555 aaa 333"); 

//扩展,iss对象支持对C语言流的操作,所以也可以进行如下的赋值

//iss.str(Input.c_str());

while(iss >> Str1 >> a)

{

cout << Str1 << " " << a << endl;

}

//stringstream类

//该类就是上述istringstream和ostringstream类的综合,支持<<, >>操作符,可以进行字符串到其它类型的快速转换

stringstream ss;

ss << Input;

while(ss >> Str1 >> a)

{

cout << Str1 << " " << a << endl;

}

//总结这几个类istringstream, ostringstream, stringstream, 包含在<sstream>文件里

//输入方式:

//1.构造函数。iss, oss, ss 都支持。eg. istreamstring iss(Input), ostreamstring(Input), stringstream ss(Input)

//2.<< 操作符。oss, ss 支持。 oss << Input, ss << Input;

//3. .Str()函数,提供C中的字符串头指针,或者匿名内存首地址

// eg. iss.str(Input.c_str()), iss.str("abc 123 345")

// oss.str(Input.c_str()), oss.str("abc 123 345")

// ss.str(Input.c_str()), ss.str("abc 123 345")

//输出方式:

//1. 通过.str()得到一份拷贝

//eg. Str1 = iss.str(), Str1 = oss.str(), Str1 = ss.str();

// 显然,这个也提供C语言的接口

// printf("%s", iss.str().c_str()), printf("%s", oss.str().c_str()), printf("%s", ss.str().c_str())

//2. >>操作符, iss和ss支持该操作

//每次不同的使用时刻必须要清空

//ss.str(""), iss.str(""), oss.str(""),暂时没有发现其它的清空方法

//最大的用处

//输入string类型,可以通过iss 或 ss 类提取出来,功能类似于C语言中的sscanf()函数, 在TC中比较常见

//提供字符串和各种类型之间的转换

return 0;

}

from:http://acm.hdu.edu.cn/forum/read.php?tid=11443

more:

做作业的时候自己做了个测试

string   str("1a123"),a;   

stringstream   ss;   

ss   <<   str;   

int   c,d; 

char e;

ss >> c>>e>>d;

cout<<c<<" "<<e<<" "<<d;

1 a 123

真的超赞啊 呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: