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;
}