- #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.str("1534");
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;
ostr=oss.str();
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;
}
分享到:
相关推荐
c++中stringstream的用法 istringstream, ostringstream, stringstream用法示例
在C++中,`sstream`主要包括三个类:`istringstream`、`ostringstream`和`stringstream`,它们都继承自`std::basic_ios`,并且分别提供了输入(input)、输出(output)和双向(bidirectional)的串流操作。...
本文将详细介绍C++风格的三种IO流对象:istringstream、ostringstream和stringstream,它们都包含在头文件中,用于处理字符串流,也就是内存中的字符串作为输入输出的数据流。 1. stringstream(字符串流) string...
这个类在头文件中定义, 库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。 简单起见,我主要以stringstream为...
但在C++11之后,这些类已被替换为更现代的`istringstream`、`ostringstream` 和 `stringstream`。 7. `fstream.h` 头文件:包含`fstream` 类定义的头文件是`fstream.h`,尽管在更新的C++版本中,通常推荐使用`#...
首先,将读取的数据转换为数值类型(如`double`),然后设置浮点数的精度,最后将格式化后的数值写入`stringstream`。 ```cpp std::istringstream iss(buffer); double value; while (iss >> value) { std::...
9. **字符串流(strstream)**:`strstream`是C++早期版本中处理内存中字符串的流类,它结合了`stringstream`、`istringstream`和`ostringstream`的功能。虽然在C++11中被推荐使用`std::stringstream`替代,但在一些旧...
这里我们可以使用`std::stringstream`解析16进制数字,并用`std::ungetc`将它们送回流,以便于读取。以下是一个简单的URL解码示例: ```cpp std::string urlDecode(const std::string& input) { std::string ...
因此,除非有特殊需求,通常推荐使用`std::stringstream`来完成类似的操作,因为它已经被设计用来处理这种混合类型的I/O操作。 总的来说,通过运算符重载,我们可以扩展`std::string`的功能,使其具备类似流的特性...
由于英文句子中的单词由空格分隔,我们可以使用`std::stringstream`或`std::string::find()`和`std::string::substr()`方法来实现。 3. **首字母大写**:对于每个单词,我们将首字母转换为大写。C++标准库没有提供...