# C++ 字符串

> 原文： [https://www.programiz.com/cpp-programming/strings](https://www.programiz.com/cpp-programming/strings)

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

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

*   作为字符串类（标准 C++ 库字符串类）的对象的字符串
*   C 字符串（C 样式的字符串）

* * *

## C 字符串

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

C 字符串是`char`类型的数组，以空字符（即`\0`）终止（空字符的 ASCII 值为 0）。

* * *

### 如何定义一个 C 字符串？

```cpp
char str[] = "C++";
```

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

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

* * *

### 定义字符串的替代方法

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

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

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

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

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

* * *

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

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

```cpp
#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;
}
```

**输出**

```cpp
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++ 程序，用于读取和显示用户输入的整行。**

```cpp
#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;
}
```

**输出**

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

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

第一个参数是字符串的名称（字符串的第一个元素的地址），第二个参数是数组的最大大小。

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

* * *

## 字符串对象

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

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

* * *

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

```cpp
#include <iostream>
using namespace std;

int main()
{
    // Declaring a string object
    string str;
    cout << "Enter a string: ";
    getline(cin, str);

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

**输出**

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

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

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

`getline()`函数将输入流作为第一个参数，即`cin`和`str`作为要存储的行的位置。

* * *

## 将字符串传递给函数

字符串以类似的方式传递给函数[数组也传递给函数](/cpp-programming/passing-arrays-function "Passing array to a function in C++")。

```cpp
#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;
}
```

**输出**

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

在上面的程序中，要求输入两个字符串。 它们分别存储在`str`和`str1`中，其中`str`是`char`数组，而`str1`是`string`对象。

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

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

此过程称为函数重载。 了解有关[函数重载](/cpp-programming/function-overloading "C++ Function overloading")的更多信息。