string本质:c++中的字符串,string本质是一个类,内部维护了一个char*
为什么使用:string重载了超级多的运算符,有超级多的成员函数使用,用起来方便。
可以在MSDN中查看帮助:https://docs.microsoft.com/zh-cn/cpp/standard-library/string?view=msvc-170
第一个: string() 无参构造,创建一个空的字符串 “”
第二个:string(const char*) ; 输入一个字符串,构建一个对象
第三个:string(const string& str); 拷贝构造,用一个string构建另外一个string
第四个:string(int n,char c);用n个c来初始化string
string& operator=(char *s) //1
string& operator=(string &s)
string& operator=(char c)
string& assign(char* s);
string& assign(string* s) //2
string& assign(char* s,int n); //把s字符串的n个字符赋值给原本字符串
string& operator+=(char *s)
string& operator+=(string &s)
string& operator+=(char c)
string& append(char* s);
string& append(const string&* s)
string& append(char* s,int n);//追加字符串s中的n个字符到原来字符串后
string& append(const string& str,int pos,int n)//把字符串的str中pos+1开始的n个字符追加到原来字符串后
int find(const string& str,int pos=0) 在pos开始的位置 查找str子字符串,返回是位置
int find(const char *str,int pos=0)
int find(const char *str,int pos,int n ) 从pos位置查找字符串str的前n个字符第一次出现的位置
int find(char c,int pos = 0); 从pos开始查找字符c在字符串的首位置
int rfind(const string& str,int pos=0) ;从后往前查找,返回找到的位置pos 从后面的那个位置开始.
int compare(string& s); //把原字符串和s字符串比较
int compare(char* s) // 把原字符串和s字符串比较,
完全相同返回 0
- #include <iostream>
- #include<string>
- using namespace std;
-
- //string 的内容
- int main(int argc, char *argv[])
- {
- /* //string构造函数
- //建立string
- string a;
- char *s="abcdefg";
- string b(s);
- string c(b);
- string d(10,'d');
- cout<<a<<endl;
- cout<<b<<endl;
- cout<<c<<endl;
- cout<<d<<endl;
- */
-
- /*
- //string 重载 = 赋值函数
- char * name="gw";
- string a;
- a=name;
- string b;
- b=a;
- char kk='g';
- //string c='a';这个是构造 没有构造参数是 字符的情况
- string c;
- c=kk;
-
- char *name1="ddddd";
- string d;
- string e;
- string f;
- d.assign(name1);
- e.assign(d);
- cout<<a<<endl;
- cout<<b<<endl;
- cout<<c<<endl;
- cout<<d<<endl;
- cout<<e<<endl;
- cout<<f<<endl;
-
- */
- /*
-
- //字符串的拼接 (在字符串string )
- string a;
- a="abcdefg";
- a+="aaaaaaa";
- cout<<a<<endl;
-
- string b("bbbbbbbb");
- b+=a;
- cout<<b<<endl;
-
- b+='h';
- cout<<b<<endl;
- b.append(a);//string 追加函数
- string c;
- c.append("aaaaaaaa",1);//只追加 字符串的 1个字符
-
- cout<<c<<endl;
- */
-
- /*
- //练习
- char * name = "class2017";
- string a=name;
- a+=' ';
- a+="is good";
- cout<<a<<endl;
- char *s="s ";
- string b=s;
- int c=a.find(b);//从字符串开头的地方开始查找
- cout<<c<<endl;
- int d=a.rfind(b,a.length());//从反方向开始查找,length(),string 的长度,rfind 的第二个参数是 查找的字符串的长度
- cout<<d<<endl;
-
- */
-
- string a("class2207");
- string b("class2207");
- string c("danny");
-
- int d=a.compare(b);
- int d1=a.compare(c);
- int d2=c.compare("danny");//完成相同返回 0
- cout<<d<<endl;
- cout<<d1<<endl;
- cout<<d2<<endl;
-
-
-
- return 0;
- }
什么是异常:是错误处理机制,当遇到问题后,不可以直接exit或者return时,需要给上一层处理。
流程:
try(检查)----->throw(抛出)----->catch(捕获)
throw:当出现问题时,程序需要抛出一个异常,通过throw+类型 抛出;
比如打开文件失败后,throw一个异常,告诉别人我出问题了,需要别人帮忙解决。
try: try中的代码是用来检测是否有异常,后面一般跟着catch
catch: 当出现问题后,try检测到问题后,catch来处理问题,防止出错。
格式:
try{ 各种代码;}catch(类型 变量){处理出现的问题}
代码:
- #include <iostream>
-
- using namespace std;
-
- int fileCp(const char* dest,const char* src)
- {
- FILE* fp = fopen(src,"r+");
- if(!fp)
- {
- throw 'a';
- }
- FILE* fp1 = fopen(dest,"r+");
- if(!fp1)
- {
- throw -1;
- }
- char buf[128]= {0};
- int readSize = 0;
- int writeSize = 0;
- while ( (readSize =fread(buf,1,sizeof(buf),fp)) > 0) {
- writeSize =fwrite(buf,1,readSize,fp1);
- if(readSize != writeSize)
- {
- throw 0.01f;
- }
-
- }
- fclose(fp);
- fclose(fp1);
- return 0;
- }
-
- void testFile(const char* dest,const char* src)
- {
- try{
- cout << "我是testFile"<<endl;
- fileCp(dest,src);
- cout << "我是在testFile中的filecp后的代码"<<endl;
- }
- catch(...) //三个点表示所有类型的异常
- {
- cout << "我是catch的代码,我啥也做不了"<<endl;
- throw -1;
- }
- }
-
- int main(int argc, char *argv[])
- {
- try
- {
- testFile("danny.txt","danny.log");
- cout << "我是main中testFile后的代码"<<endl;
- }
- catch(char c)//捕获char 类型的
- {
- cout << "我是main中的catch" << c << endl;
- }
- catch(int c)//捕获int 类型的
- {
- cout << "我是main中的int 中 catch" << c << endl;
- }
- catch(...)
- {
-
- }
-
- cout << "我是main中catch后的代码"<<endl;
-
- return 0;
- }