字符数组(先不看)¶
先把 string 用熟,再看字符数组。下面都从下标 0 开始。
用字符数组表示字符串¶
也可以这样初始化,剩余元素自动补 0:
这两种写法,开头的存储内容都是:
C 风格字符串,以 '\0' 结尾。 它的编码值是 0,表示字符串到这里结束。
"zq" 长度是 2,但存放它至少要 3 个字符位置,末尾的 '\0' 也占空间。
字符数组的输入输出¶
使用 cin、cout
使用 scanf、printf
需要头文件 <cstdio>。
读字符串时,数组名 s 前面不加 &。成功读入后,会自动补上 '\0'。
这两种输入,都不能直接读入含空格的整行内容。
字符数组的长度与遍历¶
使用 strlen,需要头文件 <cstring>。
strlen 数到第一个 '\0' 为止,不把结束符算进长度。
末尾没有 '\0',就不能当 C 风格字符串使用。 手动逐个填字符时,要自己补上结束符。
二维字符数组¶
每一行存一个字符串,可以表示棋盘、地图,也可以存一组单词。
第二维的容量,要给 '\0' 留位置。 每行最多存 109 个普通字符,再加结束符。
输入输出
下面输入 n 行 m 列的字符图,每行不含空格,长度都是 m,1 <= n, m <= 100。
#include <iostream>
using namespace std;
char s[110][110];
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> s[i];
for (int i = 0; i < n; i++) cout << s[i] << '\n';
return 0;
}
s[i] 是第 i 行,s[i][j] 是第 i 行、第 j 列的字符。
这里每行按字符串读入,空格、换行都会作为分隔。图中本身含有空格,就不能照搬这种读法。
逐个字符遍历
遇到 @ 输出 1,其他字符输出 0。