• 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.代码

            

    1. #include <iostream>
    2. #include<string>
    3. using namespace std;
    4. //string 的内容
    5. int main(int argc, char *argv[])
    6. {
    7. /* //string构造函数
    8. //建立string
    9. string a;
    10. char *s="abcdefg";
    11. string b(s);
    12. string c(b);
    13. string d(10,'d');
    14. cout<<a<<endl;
    15. cout<<b<<endl;
    16. cout<<c<<endl;
    17. cout<<d<<endl;
    18. */
    19. /*
    20. //string 重载 = 赋值函数
    21. char * name="gw";
    22. string a;
    23. a=name;
    24. string b;
    25. b=a;
    26. char kk='g';
    27. //string c='a';这个是构造 没有构造参数是 字符的情况
    28. string c;
    29. c=kk;
    30. char *name1="ddddd";
    31. string d;
    32. string e;
    33. string f;
    34. d.assign(name1);
    35. e.assign(d);
    36. cout<<a<<endl;
    37. cout<<b<<endl;
    38. cout<<c<<endl;
    39. cout<<d<<endl;
    40. cout<<e<<endl;
    41. cout<<f<<endl;
    42. */
    43. /*
    44. //字符串的拼接 (在字符串string
    45. string a;
    46. a="abcdefg";
    47. a+="aaaaaaa";
    48. cout<<a<<endl;
    49. string b("bbbbbbbb");
    50. b+=a;
    51. cout<<b<<endl;
    52. b+='h';
    53. cout<<b<<endl;
    54. b.append(a);//string 追加函数
    55. string c;
    56. c.append("aaaaaaaa",1);//只追加 字符串的 1个字符
    57. cout<<c<<endl;
    58. */
    59. /*
    60. //练习
    61. char * name = "class2017";
    62. string a=name;
    63. a+=' ';
    64. a+="is good";
    65. cout<<a<<endl;
    66. char *s="s ";
    67. string b=s;
    68. int c=a.find(b);//从字符串开头的地方开始查找
    69. cout<<c<<endl;
    70. int d=a.rfind(b,a.length());//从反方向开始查找,length(),string 的长度,rfind 的第二个参数是 查找的字符串的长度
    71. cout<<d<<endl;
    72. */
    73. string a("class2207");
    74. string b("class2207");
    75. string c("danny");
    76. int d=a.compare(b);
    77. int d1=a.compare(c);
    78. int d2=c.compare("danny");//完成相同返回 0
    79. cout<<d<<endl;
    80. cout<<d1<<endl;
    81. cout<<d2<<endl;
    82. return 0;
    83. }

                    


    二,异常:


          什么是异常:是错误处理机制,当遇到问题后,不可以直接exit或者return时,需要给上一层处理。
          流程:
                     try(检查)----->throw(抛出)----->catch(捕获)
         throw:当出现问题时,程序需要抛出一个异常,通过throw+类型 抛出;
                     比如打开文件失败后,throw一个异常,告诉别人我出问题了,需要别人帮忙解决。
         try:   try中的代码是用来检测是否有异常,后面一般跟着catch
         catch: 当出现问题后,try检测到问题后,catch来处理问题,防止出错。
         格式:
                try{ 各种代码;}catch(类型 变量){处理出现的问题}
     


    代码:

    1. #include <iostream>
    2. using namespace std;
    3. int fileCp(const char* dest,const char* src)
    4. {
    5. FILE* fp = fopen(src,"r+");
    6. if(!fp)
    7. {
    8. throw 'a';
    9. }
    10. FILE* fp1 = fopen(dest,"r+");
    11. if(!fp1)
    12. {
    13. throw -1;
    14. }
    15. char buf[128]= {0};
    16. int readSize = 0;
    17. int writeSize = 0;
    18. while ( (readSize =fread(buf,1,sizeof(buf),fp)) > 0) {
    19. writeSize =fwrite(buf,1,readSize,fp1);
    20. if(readSize != writeSize)
    21. {
    22. throw 0.01f;
    23. }
    24. }
    25. fclose(fp);
    26. fclose(fp1);
    27. return 0;
    28. }
    29. void testFile(const char* dest,const char* src)
    30. {
    31. try{
    32. cout << "我是testFile"<<endl;
    33. fileCp(dest,src);
    34. cout << "我是在testFile中的filecp后的代码"<<endl;
    35. }
    36. catch(...) //三个点表示所有类型的异常
    37. {
    38. cout << "我是catch的代码,我啥也做不了"<<endl;
    39. throw -1;
    40. }
    41. }
    42. int main(int argc, char *argv[])
    43. {
    44. try
    45. {
    46. testFile("danny.txt","danny.log");
    47. cout << "我是main中testFile后的代码"<<endl;
    48. }
    49. catch(char c)//捕获char 类型的
    50. {
    51. cout << "我是main中的catch" << c << endl;
    52. }
    53. catch(int c)//捕获int 类型的
    54. {
    55. cout << "我是main中的int 中 catch" << c << endl;
    56. }
    57. catch(...)
    58. {
    59. }
    60. cout << "我是main中catch后的代码"<<endl;
    61. return 0;
    62. }

              

  • 相关阅读:
    Unity3D 检测鼠标位置的Sprite像素颜色
    2.Java泛型指南-泛型擦除、泛型表达式、类型边界、通配符、无限制通配符、上界通配符下界通配符、泛型作用域、类型上限、?类型泛型、构造函数泛型,泛型使用规则
    muduo库的高性能日志库(一)
    Vue---SCSS
    vscode官方下载太慢解决办法
    【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍
    课堂教学观察方法与技术——阅读笔记
    SpringData Hibernate JPA 使用案例 案例 (一)
    Map和Set
    BurpSuite靶场系列之OS命令注入
  • 原文地址:https://blog.csdn.net/she666666/article/details/126669226