本文旨在记录 C语言代码初学者的学习历程并表达本人对代码的理解。
本文的内容包括:对C语言字符数组的应用——字符串反转,统计字母出现次数。
1.基本知识
C语言不存在字符串变量,但存在字符串这个概念。习惯上C语言用char数组+\\0表示字符串,\\0表示字符串的结束,不加它可能导致某些与字符串有关的函数越界。当然,可以不使用\\0示意结束,但需要自己手动规定结束。
char arr[]="hello";
char arr2[6]={'h','e','l','l','o'};
编译器会自动在末尾补\\0,以\\0结束的字符数组在C语言中就是字符串。
2.字符串反转
本题比较简单,在用数组保存数据后从后往前输出即可。
#include <stdio.h>
int main() {
int len = 4;
char arr1[len];
for (int i = 0; i < len; i++) {
scanf("%c", &arr1[i]);
}
for (int i = len – 1; i >= 0; i–) {
printf("%c", arr1[i]);
}
}
3.统计字母出现次数
开始前须知关于ASCII码的部分相关知识。本题用到两个字符数组。先用第一个数组储存输入的字符。之后定义一个长度尽可能大但不能过大的数组,并将它的初始值设为0,遍历第一个数组,,把字符强制转化成整型(即它对应的ASCII码),之后把ASCII码当作第二个数组的索引,令第二个数组对应位置的数值加一。最后,写一个遍历第二个数组的for循环,当检测到数值不为零时,按格式输出即可,即
printf(“%c=%d”,(char)arr2[i],arr2[i]);
#include <stdio.h>
int main() {
int len = 10;
char arr1[len];
for (int i = 0; i < len; i++) {
scanf("%c", &arr1[i]);
}
int arr2[265] = {0};
for (int i = 0; i < len; i++) {
int a = (int)arr1[i];
arr2[a]++;
}
for (int i = 0; i < 265; i++) {
if (arr2[i] != 0) {
printf("%c=%d ", (char)i, arr2[i]);
}
}
}

![题解:洛谷 P2873 [USACO07DEC] Mud Puddles S-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261030104545-6ae4755929e8d-220x150.png)
