跳转至

字符串

字符串,先用 string 表示,字符数组后面再学。

本篇先处理英文字母、数字和常见符号。

用 string 表示字符串

使用 string,需要头文件 <string>。

string s; // 默认是空串,内容是""
string s = "zq";

字符用单引号,字符串用双引号。 'a' 是字符,"a" 是字符串。

string 的输入输出

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;

    cout << s;

    return 0;
}

cin >> s 跳过开头的空白,再读入一段不含空白的内容。

输入 hello world,这里只读到 hello。要保留一整行的空格,用 getline,应用篇会讲。

string 的长度与访问

string s = "abc";
int len = (int)s.size(); // 长度是3

cout << s[0]; // 第一个字符,a
s[1] = 'B';   // 修改第二个字符,s变成aBc

字符下标从 0 开始。 长度为 len,需要处理的字符在 s[0] 到 s[len-1]。

空串没有字符,不能直接读取 s[0] 当成第一个字符。

string 的遍历

for (int i = 0, len = s.size(); i < len; i++) cout << s[i];

本阶段的字符串长度都能放进 int,用 len 保存长度,方便写下标循环。

也可以逐个取字符。

for (char c : s) cout << c;

这里的 c 是当前字符的副本。改 c,不会修改 s,后面的应用篇会讲怎么修改原字符。

string 的基本操作

下面的小例子分别看,先熟悉常用写法。

赋值

string s = "zq", s1;
s1 = s; // s1也变成zq

拼接字符串、字符

string s = "abc";
s += "def";
s += 'g'; // s变成abcdefg

判断相等、比较大小

if (s == "zq") cout << "Yes";
if (s < "ab") cout << "排在ab前面";

string 可以直接用 == 比较内容,用 < 按字典序比较,不是按长度比较。

多个字符串

string s[110]; // 定义在全局

这是一个一维数组,每个元素都是 string,不是 char 类型的二维数组。

使用 string,需要头文件 <string>。

输入输出

下面读入 n 个不含空白的字符串,\(0 \le n \le 100\)。

int n;
cin >> n;

for (int i = 0; i < n; i++) cin >> s[i];

for (int i = 0; i < n; i++) cout << s[i] << '\n';

同样用 s[i][j] 访问第 i 个字符串的第 j 个字符。

每个字符串的长度可以不同。按字符遍历时,要看当前 s[i].size(),不能默认每行一样长。

排序(学过 sort 后再看)

先比第一个不同的字符。如果前面都相同,一个字符串已经结束,短的排在前面。

比如 sigh 排在 sight 前面,apple 排在 banana 前面。

不是长度越短,就一定排得越前。 比较时也区分大小写。

学过 sort 后,可以把 string 数组直接排序,需要头文件 <algorithm>。

sort(s, s + n);

for (int i = 0; i < n; i++) cout << s[i] << '\n';

image-2025062313535062 0