499689317 / notes

note
2 stars 0 forks source link

C/C++ string类型 #6

Open 499689317 opened 7 years ago

499689317 commented 7 years ago

C/C++ string类型(字符串类型)

C语言 string

字符串存在方式
字符串初始化

C风格字符串存放于数组中 以'\n'结束符结束 使用%s打印字符串 字符串存入数组中可以没有'\n'结束符,此时不是字符串

字符串管理
多维数组字符串存储

C++ string

字符串字面量
标准库类型string初始化
string类操作

标准库string本身定义了许多操作string类对象的方法,包括

  1. 如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象
  2. 如果两个string对象在某些对应的位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果
  3. 两个string对象相加结果还是一个string对象
  4. 字面值与string对象相加结果还是一个string对象
  5. 不允许两个字面值直接相加,string中并没有规定这种方法

因为某些历史原因,也为了与C兼容,所以C++语言中字符串字面值并不是标准库类型string的对象,切记,字符串字面量值与string是不同的类型

字符串字面值是一种通用结构,这种结构既是C++由C继承而来的C风格字符串。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法,按此习惯书写的字符串存放在字符数组中并以空字符结束'\n',一般利用指针来操作这些字符串

在使用操作符(>/<等)比较两个C字符串与比较两个标准string类型对象时各不相同,比较两个C字符串比较的是两个指向字符串的指针(需要使用strcmp方法),比较两个标准string类型对象则调用的是重载后的操作符

允许使用以空字符结束的字符数组来初始化string对象或为string对象赋值,反之不成立,例如不能用string对象直接初始化指向字符的指针

在string对象的加法运算中允许使用以空字符结束的字符数组作为其中一个运算对象(不能两个都是);在string对象的复合赋值运算中允许使用以空字符结束的字符数组作为右侧的运算对象,反之不成立

如果程序需要一个C风格字符串,无法直接用string对象来替代它,为了完成该功能,string专门提供了一个名为c_str的成员函数