当前位置: 首页 > news >正文

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

          

相关文章:

  • Linux命令`ll`的结果解析
  • 查题校园公众号查题系统
  • git分布式版本控制系统
  • C++ Color the ball
  • mysql的基础操作语句
  • Cookie/Session
  • java抽象类和接口(Comparator和Conparable的使用)
  • 百度首个江苏智算中心落地 携手盐城共建200P算力规模
  • 并发编程(四)---设计模式
  • GitHub:建立仓库,本地上传与更新内容
  • Linux EXPORT_SYMBOL宏详解
  • 猿创征文丨赶紧进来!!!带你0距离全面接触 变量和常量
  • Unirech腾讯云代充-通过VNC 登录腾讯云国际版Windows云服务器实例教程
  • 深入剖析foreach底层原理以及并发修改异常
  • 神经网络在通信中的应用,神经网络技术及其应用
  • Android框架之Volley
  • Angular Elements 及其运作原理
  • Druid 在有赞的实践
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript设计模式系列一:工厂模式
  • miaov-React 最佳入门
  • MYSQL 的 IF 函数
  • Next.js之基础概念(二)
  • php中curl和soap方式请求服务超时问题
  • SpingCloudBus整合RabbitMQ
  • 阿里云Kubernetes容器服务上体验Knative
  • 初探 Vue 生命周期和钩子函数
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 搭建gitbook 和 访问权限认证
  • 我的面试准备过程--容器(更新中)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 智能合约Solidity教程-事件和日志(一)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • !!java web学习笔记(一到五)
  • ![CDATA[ ]] 是什么东东
  • "无招胜有招"nbsp;史上最全的互…
  • #mysql 8.0 踩坑日记
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (力扣)循环队列的实现与详解(C语言)
  • (转)fock函数详解
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET框架
  • .Net中的集合
  • .project文件
  • [100天算法】-二叉树剪枝(day 48)
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法