字符串¶
字符串,先用 string 表示,字符数组后面再学。
本篇先处理英文字母、数字和常见符号。
用 string 表示字符串¶
使用 string,需要头文件 <string>。
字符用单引号,字符串用双引号。 '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 的遍历¶
本阶段的字符串长度都能放进 int,用 len 保存长度,方便写下标循环。
也可以逐个取字符。
这里的 c 是当前字符的副本。改 c,不会修改 s,后面的应用篇会讲怎么修改原字符。
string 的基本操作¶
下面的小例子分别看,先熟悉常用写法。
赋值
拼接字符串、字符
判断相等、比较大小
string 可以直接用 == 比较内容,用 < 按字典序比较,不是按长度比较。
多个字符串¶
这是一个一维数组,每个元素都是 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>。
