一、C++标准库的主要组件:
1、标准C库
2、I/O流技术(对标准输入输出设备称为标准I/O,对在外磁盘上文件的输入输出称为文件I/O,对内存中指定的字符串存储空间的输入输出称为串I/O)
3、string类模版
4、容器(vector、list、queue、stack、deque、map、set和bitset)
5、算法
6、对国际化的支持
7、对数字处理的支持
8、诊断支持(3中报错方式:C的断言、错误号、例外)
二、I/O流技术
C++为实现数据的输入输出定义了一个庞大的类库,它包括的类主要有ios、istream、ostream、iostream、ifstream、ofstream、fstream、istrstream、ostrstream、strstream等,其中ios为根基类,其余的都是它的直接或者间接派生类。
ios直接派生四个类:输入流iostream、输出流ostream、文件流基类fstream和字符串基类strstream.
通过上面的介绍很容易理解C++中的I/O流库都包含在iostream、fstream、strstream这三个类库文件中。
C++不仅仅提供了上面的三个类库,还为用户提供了提供了标准I/O操作中的类对象,分别是cin、cout、cerr、clog
格式控制操作符:
#include <iostream> //其实iomanip中包含iostream,所以该行可省略 #include <iomanip> using namespace std; int main(){ int x = 30, y = 300, z = 1024; cout << x << ‘ ‘ << y << ‘ ‘ << z << endl; //八进制输出 cout << oct << x << ‘ ‘ << y << ‘ ‘ << z << endl; //十六进制输出 cout << hex << x << ‘ ‘ << y << ‘ ‘ << z << endl; //设置提示符和字母大写输出 cout << setiosflags(ios::showbase | ios::uppercase); cout << x << ‘ ‘ << y << ‘ ‘ << z << endl; cout << resetiosflags(ios::showbase | ios::uppercase); cout << x << ‘ ‘ << y << ‘ ‘ << z << endl; //按十进制输出 cout << dec << x << ‘ ‘ << y << ‘ ‘ << z << endl; return 0; }
自定义流操作符:
#include <iostream> using namespace std; ostream &lin(ostream &myos){ return myos << "\n-----------------"; } int main(){ cout << lin << lin << lin << endl; return 0; }
I/O操作符重载:
#include <iostream> #include <string.h> using namespace std; class Student{ friend ostream& operator << (ostream& ot, Student& popup); char name[10]; unsigned int age; unsigned long num; public: Student(char *na, unsigned int al, unsigned long number):age(al), num(number){ strcpy(name, na); } }; ostream& operator << (ostream& ot, Student& popup){ ot << "Name:" << popup.name << endl << "Age:" << popup.age << endl << "Number:" << popup.num << endl << "---------------------" << endl; return ot; } int main(){ Student a("Wang", 18, 1234), b("zhao", 19, 4312), c("liu", 20, 2341); cout << a << b << c; return 0; }
写入文件:
#include <iostream> #include <stdlib.h> #include <fstream> using namespace std; int main(void){ //定义输出文件流,并打开相应的文件 ofstream f1("a:wr1.dat"); if(!f1){ cerr << "a:wr1.data file not open!" << endl; } for(int i=0; i<21 ; i++){ f1 << i << ‘ ‘; } f1.close(); return 0; }
读文件内容:
#include <iostream> #include <std.ib.h> #include <fstream> int main(){ //规定打开的文件时输入文件,若文件不存在则返回打开失败信息 ifstream f1("wrl.dat", ios::in | ios::nocreate); //当f1打开失败时进行错误处理 if(!f1){ cerr << "wr1.data file not open!" << endl; exit(1); } int x; while(f1 >> x) cout << x << ‘ ‘; cout << endl; f1.close(); return 0; }
输入输出流操作:
#include <iostream> #include <strstream> using namespace std; int main(){ char a[50]; char b[50]; istrstream sin(a); //定义一个输入字符串流sin,使用的字符数组为a //定义一个输出字符串流sout,使用的字符数组为b ostrstream sout(b, sizeof(b)); //从键盘上输入字符 cin.getline(a, sizeof(a)); char ch = ‘ ‘; int x; while(ch !=‘@‘){ //使用‘@‘字符作为字符串流结束标志 if(ch >= 48 && ch <= 57){ //将字符压入流中 sin.putback(ch); sin >> x; //存入输出流 sout << x << ‘ ‘; } //每次取出一个字符 sin.get(ch); } sout << ‘@‘ << ends; //输出输出流的内容 cout << b; cout << endl; return 0; }
构造字符串:
#include <string> #include <iostream> using namespace std; int main(){ string Mystring1(10, ‘ ‘); string Mystring2 = "This is a string"; string Mystring3(Mystring2); cout << "string1 is : " << Mystring1 << endl; cout << "string2 is : " << Mystring2 << endl; cout << "stirng3 is : " << Mystring3 << endl; return 0; }
字符串判断函数:
1、empty()
2、length()
3、resize()改变长度
#include <iostream> #include <string> using namespace std; int main(){ string TestString = "ll11223344565666"; cout << TestString << "\n size: " << TestString.length() << endl; TestString.resize(5); cout << TestString << "\n size: " << TestString.size() << endl; TestString.resize(10); cout << TestString << "\n size: " << TestString.size() << endl; TestString.resize(15, ‘6‘); cout << TestString << "\n size: " << TestString.size() << endl; return 0; }
4、append()
5、c_str()
#include <string> #include <iostream> using namespace std; int main(){ string str1("012"); string str2("345"); cout << "str1 = " << str1.c_str() << endl; cout << "str2 = " << str2 << endl; //把字符串str2增加到str1尾部 str1.append(str2); cout << "str1 = " << str1 << endl; //返回的是一个常量指针 const char* ch = str1.c_str(); for(int i=0; i<str1.length(); i++){ cout << ch[i] << ‘ ‘; } cout << endl; str1.append(str2.c_str(), 2); //把字符串中的前两个元素插入到str1尾部 str1.append(1, ‘A‘); str1.append(str2.begin(), str2.end()); cout << "str1 = " << str1 << endl; cout << endl; return 0; }
字符和字符串连接
#include <string> #include <iostream> using namespace std; int main(){ string result; string S1 = "ABC"; string S2 = "DEF"; char CP1[] = "GHI"; char C = ‘J‘; cout << "S1 is " << S1 << endl; cout << "S2 is " << S2 << endl; cout << "C is " << C << endl; result = CP1 + S1; cout << "CP1 + S1 is " << result << endl; result = S1 + C; cout << "S1 + C is " << result << endl; result = S1 + S2; cout << "S1 + S2 is " << result << endl; result = CP1 + C + S1; cout << "CP1 + C + S1 is " << result << endl; result = S1 + CP1 + C; cout << "S1 + CP1 + C is " << result << endl; return 0; }
字符串迭代:
#include <string> #include <iostream> #include <algorithm> using namespace std; int main(){ const string hello("Hello, how are you?"); string s(hello.begin(), hello.end()); cout << "s : " << s << endl; string::iterator pos; for(pos = s.begin(); pos != s.end(); ++pos){ cout << *pos << ‘ ‘; } cout << endl; //字符串翻转 reverse(s.begin(), s.end()); cout << "reverse: " << s << endl; //去除重复元素 s.erase(unique(s.begin(), s.end()), s.end()); cout << "no duplictes: " << s << endl; }
时间: 2024-10-16 11:02:46