<C++>istringstream, ostringstream, stringstream的用法

1、ostringstream:ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型。ostringstream 只支持 << 操作符。

2、istringstream :istringstream 对象用来把一个已定字符串中的以空格隔开的内容提取出来。istringstream 只支持 >> 操作符。

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

4、这几个类istringstream, ostringstream, stringstream, 包含在 sstream 文件里。

输入方式:

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

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

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

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()得到一份拷贝

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支持该操作

每次不同的使用时刻必须要清空,oss.clear() 并不能清空内存

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

最大的用处

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

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

//*******  istringstream用法  **************************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    istringstream iss;
    string istr1, istr2, istr3;
    int a;

    //输入字符串
    iss.str("I love C");
    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);
    return 0;
}

输出:

I love C

1534

1534


//********* ostringstream用法 **********************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    ostringstream oss;
    string ostr1, ostr2, ostr3;
    string ostr;
    string strFromInt;
    string strFromDouble;

    //输出字符串
    ostr1 = "My ";
    ostr2 = "Name‘s ";
    ostr3 = "C";
    oss << ostr1;
    oss << ostr2;
    oss << ostr3;
    cout << oss.str() << endl;

    //int 转化为string
    oss.str("");
    oss << 23412;
    cout << oss.str() << endl;

    //double 转化为string
    oss.str("");
    oss << 1.2345;
    cout << oss.str() << 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;
}

输出:

My Name’s C

23412

1.2345

//*********** stringstream *********************************//
#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";

    stringstream ss;
    ss << Input;
    while(ss >> Str1 >> a)
    {
        cout << Str1 << " " << a << endl;
    }
}

输出:

abc 123

bcd 456

sss 999

//*********** getline(cin, line) *********************************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    string line, word;
    while (getline(cin, line))   //getline(cin ,s)   读取一行输入的字符串,包括空格  字符串流是通过空格判断一个字符串的结束
    {
        stringstream stream(line);
        cout << stream.str() << endl;
        while (stream >> word){ cout << word << endl; }
    }
    return 0;
}

输入:1 2 3 4

输出:

1 2 3 4

1

2

3

4

//********** 字符串流是通过空格判断一个字符串的结束 **************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    int val1 = 512, val2 = 1024;
    stringstream ss;
    ss << "val1: " << val1 << endl          //“val1: "
        << "val2: " << val2 << endl;
    cout << ss.str();

    string dump;
    int a, b;
    ss >> dump >> a
        >> dump >> b;
    cout << a << " " << b << endl;
    return 0;
    }

输出:

val1: 512

val2: 1024

512 1024

//************* ss.str("") *********************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss;
    string s;
    ss << "shanghai no1 school";
    ss >> s;
    cout << "size of stream = " << ss.str().length() << endl;
    cout << "s: " << s << endl;
    ss.str("");
    cout << "size of stream = " << ss.str().length() << endl;
    return 0;
}

输出:

shanghai no1 school

size of stream = 19

s: shanghai

size of stream = 0

另外可参考:istringstream, ostringstream, stringstream用法示例

时间: 2024-10-13 04:44:44

<C++>istringstream, ostringstream, stringstream的用法的相关文章

转:stringstream的用法

[本文来自]http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换. 为什么要学习 如果你已习惯了&l

stringstream的用法-类型之间的转换

本文来自: http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html 使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性.类型安全和可扩展性.在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换. 为什么要学习 如果你已习惯了&

stringstream常见用法介绍

1 概述 <sstream> 定义了三个类:istringstream.ostringstream 和 stringstream,分别用来进行流的输入.输出和输入输出操作.本文以 stringstream 为主,介绍流的输入和输出操作. <sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险:而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符

HDU 4329 MAP(stringstream的用法)

这个题目有点绕,但是按着他的意思写不难模拟出来.本来是一场学弟们的训练赛,我这个学长在赛场上却WA了四次都没过,三条黑线就一直在我的脑袋上挂着... 赛后开始找原因,后来发现题目看错了,1/R中的R是指原先URL的个数. 改过来发现还是过不了,想到了自己的输入处理可能是有问题的,既然自己模拟容易出错,那就使用了stringstream,自动提取单词,成功AC. 意外的发现stringstream的功能十分强大,但是因为速度比较慢,用处比较少,所以也不怎么用,这个哥们写的不错,感兴趣可以去看看哦.

stringstream的用法(转)

stringstream的基本用法 stringstream是字符串流.它将流与存储在内存中的string对象绑定起来. 在多种数据类型之间实现自动格式化. 1 stringstream对象的使用 #include<sstream> #include<iostream> using namespace std; int main() { string line,word; while(getline(cin,line)) { stringstream stream(line); c

stringstream类的简介和用法

一.简介 <sstream>类库定义了三种类:istringstream,ostringstream,stringstream.分别用来进行流的输入,流的输出,输入输出操作.在此演示stringstream的使用.**stringstream最大的特点是可以很方便的实现各种数据类型的转换,不需要像C语言中转换那么麻烦,而且转换非常安全.所以stringstream经常用于方便安全的类型转换. 二.用法 (1)数据的分割(string --> string) 1 #include<s

字符串流

字符串流包括istringstream ostringstream stringstream: 每一个流类都提供一个默认的缓冲区,当我们没有提供给缓冲区时,流类会自己构建一个缓冲区. 如同我们可以cout<<200,和cout<<"200"输出效果是一样的,同样,我们也可以将一个double输出给一个字符串流,也可以将一个字符串流输出给double. #include <iostream> #include <sstream> using

【C++】int转换为string的两种方法(to_string、字符串流)

本文转自http://blog.csdn.net/chavo0/article/details/51038397 记录一下用到过的int转换成string的两种方法 第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~) to_string这个函数还是很强大的! string to_stri

UVa1593_Allgnment_Of_Code

1 /** 2 start: integer; // begins hear 3 stop: integer; // ends here 4 s: string; 5 c: char; // temp 6 **/ //测试数据 7 #include<iostream> 8 #include<sstream> 9 #include<string> 10 #include<vector> 11 using namespace std; 12 13 vector&