C++ String详解

  • 标准库类型string代表可变长的字符序列,使用前需添加头文件<string>,string定义在命名空间std中。
  • string的定义和初始化:
  • 初始化string对象的几种方式:
  • 1 string s1;//默认初始化方式,s1是一个空字符串 
     2 string s2 = s1;//s2是s1的副本
     3 string s3 = "hello";//s3是该字面值的副本
     4 string s4("hello");//等价于s3 = “hello”
     5 string s5(10,'c');//s5的内容为cccccccccc
  •  拷贝初始化和直接初始化
    • 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化
    • 反之,如果不使用等号,则执行的是直接初始化
    • 当用于类类型对象时,初始化的拷贝形式和直接形式有所不同,直接初始化直接调用与实参匹配的构造函数,拷贝初始化总是调用复制构造函数。拷贝初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将临时对象复制到正在创建的对象
    • 对于拷贝初始化,最明显的调用手段就是使用"="符号,但还有许多隐式调用的情况,如:参数传递,函数返回,初始化容器
      • 参数传递:对于函数的参数传递,除非是引用参数,否则就是一个使用上层传递参数的拷贝参数
      • 函数返回值:除非是引用返回值,否则返回的也是上层对象的一个拷贝
  • 读写string
 1 //getline函数的作用是从输入流中读取一行字符
 2 //示例代码
 3 #include <iostream>
 4 #include <string>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     string s;//定义一个名为s的空字符串
10     cout << "enter a sentence" << endl;
11     cin >> s;//将标准输入的内容读取到s中
12     cout << "The string read with cin is:" << s << endl;
13 //在执行读取操作时,string对象会自动忽略开头的空白,并从一个真正的字符开始,直到遇到下一个空白结束
14 //所以如果程序的输入是“ hello world”,则输出将是“hello”,输出结果中没有任何空格
15 
16     //getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止,然后把所读内容存入string对象中
17     getline(cin,s);//从输入流中读取内容存入s中
18 }
  • size_type
    • 由string类类型和vector类类型定义的类型,用于保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型
    • size_type是一个无符号类型的值,而且能够放下任何string对象的大小,所有用于存放string类的size函数返回值的变量,都应该是string::size_type类型的
    • size_type从本质上讲,是一个整型数,关键是由于机器的环境不同,他的长度是不同的,这就体现了机器无关性
  • string对象的比较运算
    • 相等性运算符(==和!=)分别检验两个string对象相等或不相等,区分大小写,意味着长度相同且所包含字符也全部相同
    • str.compare(“ str1”)==0    str和str1比较,若相等则为compare返回0,与0比较为真,反之则为假
  • string对象的拼接
    • 两个string对象相加得到一个新的string对象,其内容是把左侧的运算对象与右侧的运算对象串接而成
1 string s1 = "hello, ",s2 = "world
";
2 string s3 = s1 + s2;//s3的内容是hello, world
    • 字面值和string对象相加
1 //当把string对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保每个加法运算符两侧的运算对象至少有一个是string对象
2 string s4 = s1 + ", ";//正确,把一个string对象和字符串字面值相加
3 string s5 = "hello" + ",";//错误,两个运算对象都不是string
原文地址:https://www.cnblogs.com/danielStudy/p/6732273.html