原文: https://www.programiz.com/cpp-programming/strings

在本文中,您将学习如何在 C 中处理字符串。您将学习声明它们,对其进行初始化以及将它们用于各种输入/输出操作。

字符串是字符的集合。 C++ 编程语言中通常使用两种类型的字符串:

  • 作为字符串类(标准 C++ 库字符串类)的对象的字符串
  • C 字符串(C 样式的字符串)

C 字符串

在 C 编程中,字符集合以数组形式存储,C++ 编程也支持这种形式。 因此,它称为 C 字符串。

C 字符串是char类型的数组,以空字符(即\0)终止(空字符的 ASCII 值为 0)。


如何定义一个 C 字符串?

  1. char str[] = "C++";

在上面的代码中,str是一个字符串,包含 4 个字符。

虽然"C++"具有 3 个字符,但空字符\0会自动添加到字符串的末尾。


定义字符串的替代方法

  1. char str[4] = "C++";
  2. char str[] = {'C','+','+','\0'};
  3. char str[4] = {'C','+','+','\0'};

像数组一样,不必使用为字符串分配的所有空间。 例如:

  1. char str[100] = "C++";

示例 1:使用 C++ 字符串读取单词

C++ 程序,用于显示用户输入的字符串。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char str[100];
  6. cout << "Enter a string: ";
  7. cin >> str;
  8. cout << "You entered: " << str << endl;
  9. cout << "\nEnter another string: ";
  10. cin >> str;
  11. cout << "You entered: "<<str<<endl;
  12. return 0;
  13. }

输出

  1. Enter a string: C++
  2. You entered: C++
  3. Enter another string: Programming is fun.
  4. You entered: Programming

请注意,在第二个示例中,仅显示Programming,而不是Programming is fun.

这是因为提取运算符>>在 C 中作为scanf()起作用,并且认为空格""具有终止字符。


示例 2:用于读取一行文本的 C++ 字符串

C++ 程序,用于读取和显示用户输入的整行。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char str[100];
  6. cout << "Enter a string: ";
  7. cin.get(str, 100);
  8. cout << "You entered: " << str << endl;
  9. return 0;
  10. }

输出

  1. Enter a string: Programming is fun.
  2. You entered: Programming is fun.

要读取包含空格的文本,可以使用cin.get函数。 该函数有两个参数。

第一个参数是字符串的名称(字符串的第一个元素的地址),第二个参数是数组的最大大小。

在上面的程序中,str是字符串的名称,100是数组的最大大小。


字符串对象

在 C++ 中,您还可以创建一个用于保存字符串的字符串对象。

与使用char数组不同,字符串对象没有固定的长度,可以根据需要进行扩展。


示例 3:使用字符串数据类型的 C++ 字符串

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. // Declaring a string object
  6. string str;
  7. cout << "Enter a string: ";
  8. getline(cin, str);
  9. cout << "You entered: " << str << endl;
  10. return 0;
  11. }

输出

  1. Enter a string: Programming is fun.
  2. You entered: Programming is fun.

在该程序中,声明了字符串str。 然后从用户询问字符串。

除了使用cin>>cin.get()函数外,您还可以使用getline()获得输入的文本行。

getline()函数将输入流作为第一个参数,即cinstr作为要存储的行的位置。


将字符串传递给函数

字符串以类似的方式传递给函数数组也传递给函数

  1. #include <iostream>
  2. using namespace std;
  3. void display(char *);
  4. void display(string);
  5. int main()
  6. {
  7. string str1;
  8. char str[100];
  9. cout << "Enter a string: ";
  10. getline(cin, str1);
  11. cout << "Enter another string: ";
  12. cin.get(str, 100, '\n');
  13. display(str1);
  14. display(str);
  15. return 0;
  16. }
  17. void display(char s[])
  18. {
  19. cout << "Entered char array is: " << s << endl;
  20. }
  21. void display(string s)
  22. {
  23. cout << "Entered string is: " << s << endl;
  24. }

输出

  1. Enter a string: Programming is fun.
  2. Enter another string: Really?
  3. Entered string is: Programming is fun.
  4. Entered char array is: Really?

在上面的程序中,要求输入两个字符串。 它们分别存储在strstr1中,其中strchar数组,而str1string对象。

然后,我们有两个函数display()将字符串输出到字符串上。

这两个函数之间的唯一区别是参数。 第一个display()函数将char数组作为参数,而第二个函数将string作为参数。

此过程称为函数重载。 了解有关函数重载的更多信息。