将“abcdefg”逆序
注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印
方法一:非递归
#include <stdio.h> #include <string.h> // 将“abcdefg”逆序 // 注意题意是将字符串逆序,会对字符串本身进行操作,而不是单纯逆序打印 void reverse(char arr[]) { int sz = strlen(arr); //计算字符串长度,注意sizeof要在主函数内且会多计算一个‘\0’ int left = 0; int right = sz -1; // 设置左右起点 int temp = 0; // 交换中间量 for (left = 0; left < right; left++) { temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; right -= 1; } } int main() { char arr[] = "abcdefg"; reverse(arr); // 逆序函数 printf("%s\n", arr); //打印字符串数组 }
方法二:递归实现
#include <stdio.h> // 递归法 void reverse(char *str) // 这样的形参传参和之前的本质一样,便于理解 { int tmp = *str; //1 将a赋值给临时变量 int len= strlen(str); //计算字符串长度,注意sizeof要在主函数内且会多计算一个‘\0’ *str = *(str + len - 1); // 2 将g赋值给原来a的内存 *(str + len - 1) = '\0'; // 3 原来g的位置放 '\0',得到新字符串“gbcdef” if (strlen(str + 1) >= 2) // 4 开始递归 reverse(str + 1); *(str + len - 1) = tmp; // 5 将临时变量里的值拿来放到最后的'\0' } int main() { char arr[] = "abcdefg"; reverse(arr); // 逆序函数 printf("%s\n", arr); //打印字符串数组 }
标签:arr,int,练习,str,字符串,left,逆序 From: https://www.cnblogs.com/xiaowanglong/p/17912183.html