ostringstream和istringstream和stringstream用法示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

istringstream, ostringstream, stringstream用法示例
今天看到了一个比较有用的c++的输入输出控制类。

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。

istringstream类用于执行C++风格的串流的输入操作。

ostringstream类用于执行C风格的串流的输出操作。

strstream类同时可以支持C风格的串流的输入输出操作。

istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符。

#include<iostream>
#include<sstream> //istringstream 必须包含这个头文件
#include<string>
using namespace std;
int main()
{
string str="i an a boy";
istringstream is(str);
string s;
while(is>>s)
{
cout<<s<<endl;
}
}
输出是:
i
am
a
boy
#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;
}
以下是自己写的练习程序
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
//istringstream用法
istringstream iss;
string istr1,istr2,istr3;
int a;
//输入字符串
iss.str("I love Ziyu");
iss>>istr1>>istr2>>istr3;
cout<<istr1<<" "<<istr2<<" "<<istr3<<endl;
// 字符串转换为int
iss.clear();
iss>>a;
cout<<a<<endl;
//用C测试转换
printf("%d\n",a);
//ostringstream用法ostringstream oss; string ostr1,ostr2,ostr3; string ostr;
string strFromInt; string strFromDouble;
//输出字符串
ostr1="My ";
ostr2="Name's ";
ostr3="Steve";
oss<<ostr1;
oss<<ostr2;
oss<<ostr3;
cout<<oss.str()<<endl;
cout<<ostr<<endl;
//int 转化为string
oss.str("");
oss<<23412;
strFromInt=oss.str();
cout<<strFromInt<<endl;
//double 转化为string
oss.str("");
oss<<1.2345;
strFromDouble=oss.str();
cout<<strFromDouble<<endl;
//将string型赋给char型。

关键:c_str函数的返回值是const char*的,不能直接赋值给char*,必须赋给const char*
const char *I=strFromInt.c_str();
const char *D=strFromDouble.c_str();
printf("%s,%s\n",I,D);
return 0;
}。

相关文档
最新文档