C++处理字符串有两种方式:一种是C风格字符串,一种是 string 类。

C风格字符串有一种特殊性质:必须以空字符串(\0)结尾。例如:

  1. char str1[3] = {'a', 'b', 'c'}; //不是一个字符串
  2. char str2[3] = {'a', 'b', '\0'}; //是字符串

有一种更好的、将字符数组初始化为字符串的方法:

  1. char list1[11] = "abcde"; //自动添加\0
  2. char list2[] = "abcde"; //编译器计算长度并自动添加\0

用双引号括起来的字符串会隐式的包括结尾的空字符!

4.2.1 拼接字符串常量

以下语句等效:

  1. cout << "abc" "def\n";
  2. cout << "abcddef\n";
  3. cout << "abc"
  4. "def\n";

第1行中,第1个字符串中的\0将被第2个字符串的首字符替代。

4.2.2 在数组中使用字符串

要将字符串存储到数组中,有两种方法:1.将数组初始化为字符串常量;2.将键盘或文件输入到数组中。例如:

  1. #include <iostream>
  2. #include <cstring> //提供了字符串相关函数,旧的头文件是 string.h
  3. using namespace std;
  4. int main()
  5. {
  6. const int Size = 15;
  7. char name1[Size];
  8. char name2[Size] = "C++owboy";
  9. cout << "I'm " << name2 << "! What's your name?\n";
  10. cin >> name1;
  11. cout << "Your name has " << strlen(name1) << " letters in an array of " << sizeof(name1) << endl;
  12. return 0;
  13. }

其中,sizeof 运算符指出整个数组长度15,但 strlen() 返回字符串长度而不是数组本身长度。此外,strlen() 只计算可见字符,而不把空字符计算在内。如果要存储 abcd 字符串,数组长度必须大于 strlen(“abcd”) + 1 = 5。