文章目录
-
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 小结
1. 概要
👉 Jack Qiao带着米粒来到神农架:“欢迎,勇敢的探索者。”一个神秘的声音从四面八方传来,“要解开我的秘密,你必须证明你的智慧和勇气。我将给你一段魔法咒语“ooB idibboB idibbiB”,但它是逆序书写而成的。只有正确地逆转这段咒语,你才能继续前行。”
😇 米粒想到用指针来逆转字符串。
2. 整体架构流程
2.1. 头文件
#include <stdio.h> #include <string.h>
🌻 #include <stdio.h>:包含标准输入输出库的头文件,用于处理基本的输入输出操作,如 printf 和 scanf。
🌻 #include <string.h>:包含字符串处理函数的头文件,用于计算字符串长度,如 strlen。
2.2. 反转函数reverse
void reverse(char arr[]) {int len = strlen(arr); // 获取字符串长度for (int left = 0, right = len - 1; left < right; left++, right--) {// 交换字符char temp = arr[left];arr[left] = arr[right];arr[right] = temp;} }
🌹 参数:char arr[] 是一个字符数组(实际上是一个指向字符的指针),表示要反转的字符串。
🌹 局部变量len:使用 strlen(arr) 获取字符串的实际长度(不包括终止符 '\0')。
🌹 循环逻辑:使用 for 循环,从两端向中间逐步交换字符。left 初始化为 0,表示从字符串的左端开始。right 初始化为 len - 1,表示从字符串的右端开始。条件 left < right 确保只在左右两端指针没有相遇或交错时进行交换。🌹 在每次迭代中:使用临时变量 temp 存储 arr[left] 的值。将 arr[right] 的值赋给 arr[left]。将 temp 的值赋给 arr[right]。分别将 left 和 right 向中间移动一位,即 left++ 和 right--。
🌹 这个过程一直持续到 left 和 right 相遇或交错,此时整个字符串已经反转完毕。
2.3. 主函数main
int main() {char arr[] = "ooB idibboB idibbiB";reverse(arr);printf("%s\n", arr);return 0; }
🌷 定义字符数组:char arr[] = "ooB idibboB idibbiB"; 定义并初始化一个包含字符串 "ooB idibboB idibbiB" 的字符数组。注意,字符数组末尾会自动添加一个空字符 '\0'。
2.4. 运行结果
2.5. 所有程序
#include <stdio.h>
#include <string.h>void reverse(char arr[])
{
int len = strlen(arr); // 获取字符串长度
for (int left = 0, right = len - 1; left < right; left++, right--)
{
// 交换字符
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}int main()
{
char arr[] = "ooB idibboB idibbiB";
reverse(arr);
printf("%s\n", arr);
return 0;
}
3. 技术名词解释
✅ Bibbidi Bobbidi Boo 来自迪士尼动画《灰姑娘,仙母用这句咒语帮助灰姑娘实现愿望,比如将南瓜变成马车。
4. 技术细节
4.1. 反转函数reverse
void reverse(char arr[]) {int len = strlen(arr); // 获取字符串长度for (int left = 0, right = len - 1; left < right; left++, right--){// 交换字符char temp = arr[left];arr[left] = arr[right];arr[right] = temp;} }
🌹 局部变量len:使用 strlen(arr) 获取字符串的实际长度(不包括终止符 '\0')。
5. 小结
✅ 使用 strlen 获取字符串长度时,它不包括结尾的空字符 '\0'。所以反转时,右指针应该初始化为 len - 1。
✅ 反转字符串时,确保左右两端的字符正确交换,直到两个指针相遇或交错。每次交换后,左指针向右移,右指针向左移。
❗ 这个方法适用于单字节字符(如英文)。如果处理多字节字符(如中文),直接按字节交换可能会导致乱码。