C++ 字符串

在本教程中,您将学习在 C++ 如何声明、初始化和处理字符串,并将它们用于各种输入/输出操作。

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

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

C 字符串

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

C 字符串是以空字符结尾的 char 类型数组,即 \0 (空字符的 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 << "Enter a string: ";
    cin >> str;
    cout << "You entered: " << str << endl;

    cout << "\nEnter another string: ";
    cin >> str;
    cout << "You entered: "<<str<<endl;

    return 0;
}

输出

Enter a string: C++
You entered: C++

Enter another string: Programming is fun.
You entered: Programming

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

这是因为提取运算符 >> 像在 C 中的 scanf() 工作方式一样,认为空格 " " 具有终止字符。

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

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

#include <iostream>
using namespace std;

int main()
{
    char str[100];
    cout << "Enter a string: ";
    cin.get(str, 100);

    cout << "You entered: " << str << endl;
    return 0;
}

输出

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

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

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

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

string 对象

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

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

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

此 C++ 程序演示了 C++ 中的 string 类的用法。

#include <iostream>
using namespace std;

int main()
{
    // 声明一个 string 对象
    string str;
    cout << "Enter a string: ";
    getline(cin, str);

    cout << "You entered: " << str << endl;
    return 0;
}

输出

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

在这个程序中,声明了一个字符串 str。然后让用户输入字符串的内容。

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

getline() 函数将输入流 cin 作为第一个参数并将 str 作为存储的位置。

将字符串传递给函数

字符串传递给函数的方式与数组传递给函数的方式类似。

#include <iostream>

using namespace std;

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

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

    cout << "Enter a string: ";
    getline(cin, str1);

    cout << "Enter another string: ";
    cin.get(str, 100, '\n');

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

void display(char s[])
{
    cout << "Entered char array is: " << s << endl;
}

void display(string s)
{
    cout << "Entered string is: " << s << endl;
}

输出

Enter a string:  Programming is fun.
Enter another string:  Really?
Entered string is: Programming is fun.
Entered char array is: Really?

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

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

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

创建两个名称相同而参数不同的函数的过程称为函数重载