C++ 语言学习 day06 string , 异常

一.字符串string


     string本质:c++中的字符串,string本质是一个类,内部维护了一个char*
     为什么使用:string重载了超级多的运算符,有超级多的成员函数使用,用起来方便。
      可以在MSDN中查看帮助:https://docs.microsoft.com/zh-cn/cpp/standard-library/string?view=msvc-170



     1.构造:


       第一个: string()  无参构造,创建一个空的字符串 “”
       第二个:string(const char*) ; 输入一个字符串,构建一个对象
       第三个:string(const string& str); 拷贝构造,用一个string构建另外一个string
        第四个:string(int n,char c);用n个c来初始化string 



    2. 字符串的赋值(给字符串赋值修改原来字符串内容)


            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个字符赋值给原本字符串



    3. 字符串的拼接(在字符串sting后追加新的字符串)


           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个字符追加到原来字符串后


    4.字符串的查找(替换)


        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 从后面的那个位置开始.



    
     5. 字符串的比较    


       int compare(string& s);  //把原字符串和s字符串比较
       int compare(char* s)    // 把原字符串和s字符串比较,
        完全相同返回 0 


        6.代码

        

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

          

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值