C++标准库 字符串流

Notice:

  • C++标准库所有的头文件都没有扩展名(.h)。
  • 其中18个<cname>形式的头文件内容与标准C语言的name.h头文件相同,C++中不建议使用name.h形式。
  • C++标准库由C库C++库(增加了面向对象的库)和标准模板库STL(常用的基本数据结构和基本算法)组成。
  • 字符串流是程序数据与设备进行数据交换的桥梁。

1 C++标准库

C++标准库索引

  • ① C1语言支持    ② C2输入/输出        
  • ③ C3诊断功能    ④ C4通用工具    ⑤ C5字符串    ⑥ C6容器        
  • ⑦ C7迭代器    ⑧ C8算法    ⑨ C9数值操作    ⑩C10本地化

C++库 常用库

  • <string>:支持字符串处理的类库。
  • <iostream>:标准I/O流类库,提供了cin、cout等全局对象类支持输入输出。
  • <fstream>:读写文件的类。

标准模板库(STL)

  • 几乎所有的STL代码都采用了类模板和函数模板形式,相比于传统的由函数和类组成的库,STL提供了更好的代码重用。
  • <algorithm>        <deque>        <functional>        <iterator>        <vector>        <list>        <map>        <memory>        <numeric>        <queue>        <set>        <stack>        <utility>

2 字符串流

字符串流

  • 字符串流是以内存中的string对象或字符数组(C语言)为输入输出的对象,将数据输出到内存中的字符串存储区域,或从字符串存储区域读入数据。
  • 利用输入输出操作方式将各种类型的数据转换成字符序列,或者相反。
  • 字符串流有c++ string对象流(istringstream、ostringstream、stringstream),定义在<sstream>中。还有定义在<strstream>中的C风格字符串,目前很少用。
  • 使用时需要建立字符串流对象,通过构造函数或者成员函数str( )关联某个字符串,进而可通过输入输出形式操作。

实例说明

ostringstream

  • 用来进行格式化的输出,可以将各种类型转换为string类型。
// This string steam only uses operator <<
ostringstream ostrs;    // define object ostrs
ostrs << 3.123;    // transform float to string
ostrs << " ";
ostrs << 234;    // transform int to string
cout << ostrs.str();    // output: 3.123 234

istringstream

  • 用于把字符串中以空格隔开的内容提取出来,只支持 >> 操作符。
int num;
string str1;
string instr = "dfs 234 qwe 456 werr 678";
// assign for Istrs by constructor function
istringstream Istrs(instr);
// output str1 and num with while
// Instr is stringbuf type
while(Instr >> str1 >> num)
    cout << str1 << " " << num << endl;
// OUTPUT: dfs 234
//         qwe 456
//         werr 678

stringstream

  • 是ostringstream和istringstream的综合,支持<<和>>操作。
int a; string str1;
string input = "abc 123 def 456 ghi 789";
stringstream Ss;
Ss << input;
while(Ss >> str1 >> a) 
    cout << str1 << " " << a << endl;

3 综合应用实例

// input strings containing +/- to 
// calculate answer of string math formula
#include <iostream>
#include <sstream> 
using namespace std;
int main() { 
    string s1, s2;
    ostringstream oss;
    istringstream iss;
    char c1 = '+', c2;
    double val, sum = 0.0;
    //cin string, example : 1000+200-30+4+0.4
    //add space in string end
    cin >> s2;
    iss.str(s2); //copy s2 to input string stream
    while (c1 != ' ') {
        iss >> val >> c2; //read a value and +/-
        //decided by front operator of val
        if (c1 == '+') sum = sum + val;
        else if (c1 == '-') sum = sum - val;
        c1 = c2, c2 = ' '; //save +/- for next
    }
    oss << sum; s1 = oss.str(); //s1 is copy
    cout << s1 << endl; 
    return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值