C++标准库string的使用

92 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

C++标准库string.png

string表示可变长的字符序列

 #include <string> //包含string头文件
 using std::string; //string包含在命名空间std中

初始化string对象

string可以直接初始化,也可以拷贝初始化

 string s1; //默认初始化,s1是空串
 ​
 string s2(s1); //s2是s1的副本
 ​
 string s2 = s1; //和上述等价
 ​
 string s3("value"); //s3是字面量“value”的副本,除了最后的空字符外
 ​
 string s3 = "value"; // 和上述等价
 ​
 string s4(n,'c'); // s4初始化为又连续n个字符c组成的字符串
 ​

初始化方式区别

  • 使用等号初始化一个变量,执行的是拷贝初始化

    编译器会把等号右边的值拷贝到新创建的对象中

  • 不使用等号,则执行直接初始化

    只有一个值,使用二者都可以

    初始化需要多个值时,一般来说只能使用直接初始化

 string s5 = “hello"; // 拷贝初始化
 string s6("hello"); // 直接初始化
 string s7(10,'h'); //直接初始化

string的操作方法

string的操作.png

  • 读写string

    通过输入输出流,输出string到输出流或者输入流,输入数据到string

     string s;
     cin >> s;  //输入数据到s中
     cout << s ; //输出s
    

    读写时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止

  • 读取一整行

    getline()会每次读取一整行,读取直到一行的末尾

    1. >>区别:会保留输入时的空白符
    2. geline()返回的字符串不包含最后的换行符,被丢弃了
  • 获取string长度和判空

    • empty()函数判空,空则返回true
    • size()函数返回string的长度,返回值是string::size_type类型

      • string::size_type是一个无符号类型的值
      • 可以使用auto或者decltype代替string::size_type,用以做类型推断
      • 不要混用intstring::size_type,相当于混用了无符号和有符号类型的数据,可能会产生非预期效果
  • string比较

      1. string比较都是对大小写敏感的
      2. 如果长度一样,较短的每个字符都和较长的对应位置一致,那么较短的就小于较长的string
      3. 如果对应位置字符不一致,则比较的结果就是第一对相异的字符的比较结果
  • string相加

    • string对象相加,结果就是将string右边的字符串进行拼接

       string s1 = "hello,";
       string s2 = "world";
       string s3 = s1+s2; //s3就是 “hello,world ”
      
    • 字面量相加

      如果都是字面量直接相加是错误的,字面量的左右,至少要有一个是string对象

       string s = "hello," + "world"//错误
       ​
       string s1 =  "hi,";
       string s2 = s1+ "你好"//正确
       ​
       string s4=   "hello," + "world" + s1; //错误,好比("hello," + "world“) + s1,两个字面量在相加
       string s2 = "hello," + s1 + "world" //正确
      

字符处理方法

都定义在cctype头文件中,详细见图,就不过多介绍了

字符处理.png