跳到主要内容

C++ 字符串

提示
  1. 字符串类型:C++中有两种常用的字符串类型:标准C++库中的字符串类对象和C风格字符串(C-strings)。
  2. C-风格字符串:在C++中,C-风格字符串是以空字符\0结尾的char类型数组。可以使用多种方式定义,例如char str[] = "C++";
  3. 字符串对象:C++允许使用字符串对象,这种字符串没有固定长度,可以根据需要扩展。与字符数组不同,字符串对象使用getline()来读取含空格的文本行。

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

  • 字符串类的对象(标准 C++ 库字符串类)
  • C-字符串(C 风格字符串)

C-字符串

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

C-字符串是以空字符 \0 结尾的 char 类型数组(空字符的 ASCII 值为 0)。

如何定义 C-字符串?

char str[] = "C++";

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

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

定义字符串的其他方式

char str[4] = "C++";

char str[] = {'C','+','+','\0'};

char str[4] = {'C','+','+','\0'};

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

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

示例 1:C++ 字符串读取一个单词

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

#include <iostream>
using namespace std;

int main()
{
char str[100];

cout << "输入一个字符串:";
cin >> str;
cout << "你输入了:" << str << endl;

cout << "\n输入另一个字符串:";
cin >> str;
cout << "你输入了:" << str << endl;

return 0;
}

输出

输入一个字符串:C++
你输入了:C++

输入另一个字符串:编程很有趣。
你输入了:编程

注意,在第二个示例中只显示了 "编程" 而不是 "编程很有趣"。

这是因为提取运算符 >> 的工作方式与 C 中的 scanf() 类似,认为空格 " " 是一个终止字符。

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

C++ 程序读取并显示用户输入的整行文本。

#include <iostream>
using namespace std;

int main()
{
char str[100];
cout << "输入一个字符串:";
cin.get(str, 100);

cout << "你输入了:" << str << endl;
return 0;
}

输出

输入一个字符串:编程很有趣。
你输入了:编程很有趣。

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

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

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

字符串对象

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

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

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

#include <iostream>
using namespace std;

int main()
{
// 声明一个字符串对象
string str;
cout << "输入一个字符串:";
getline(cin, str);

cout << "你输入了:" << str << endl;
return 0;
}

输出

输入一个字符串:编程很有趣。
你输入了:编程很有趣。

在这个程序中,声明了一个名为 str 的字符串。然后从用户那里请求字符串。

不用使用 cin>>cin.get() 函数,您可以使用 getline() 获取输入的文本行。

getline() 函数将输入流作为第一个参数,这里是 cin,而 str 是存储行的位置。

将字符串传递给函数

字符串传递给函数的方式类似于将数组传递给函数

#include <iostream>

using namespace std;

void display(char *);
void display(string);

int main()
{
string str1;
char str[100];

cout << "输入一个字符串:";
getline(cin, str1);

cout << "输入另一个字符串:";
cin.get(str, 100, '\n');

display(str1);
display(str);
return 0;
}

void display(char s[])
{
cout << "输入的 char 数组是:" << s << endl;
}

void display(string s)
{
cout << "输入的字符串是:" << s << endl;
}

输出

输入一个字符串:编程很有趣。
输入另一个字符串:真的吗?
输入的字符串是:编程很有趣。
输入的 char 数组是:真的吗?

在上面的程序中,要求输入两个字符串。这些分别存储在 str 和 str1 中,其中 str 是一个 char 数组,str1 是一个 string 对象。

然后,我们有两个函数 display() 用于输出字符串。

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

这个过程称为函数重载。了解更多关于函数重载