题目描述:
?这里我们采用两种办法来解决这道题:
第一种使用常规的C语言库函数和while循环的方式来解决一下。
首先分析一下此题,如果用strlen的方法来写的话,交换顺序会非常容易。
源代码:?
#include<stdio.h>
#include<string.h> void reverse_string(char*str) { ?? ?int len = strlen(str); ?? ?int left = 0; ?? ?int right = len - 1; ?? ?while (left < right) ?? ?{ ?? ??? ?char tmp = str[left]; ?? ??? ?str[left] = str[right]; ?? ??? ?str[right] = tmp; ?? ??? ?left++; ?? ??? ?right--; ?? ?} } int main() { ?? ?char arr[50] = { 0 }; ?? ?scanf("%s", arr); ?? ?//数组名是首元素的地址 ?? ?//首元素就是char类型,即char* ?? ?reverse_string(arr); ?? ?printf("%s\n", arr);//期望结果是fedcba ?? ?return 0; }
方法二:
如果使用递归,不能使用C语言的库函数时,那么我们语言自定义一个strlen.
自定义一个类似于strlen函数的功能也非常容易,我们就需要使用一个计数器,用while循环加count的形式来测出字符串长度。
此代码非常的精巧,这里我们需要注意一个东西,在用tmp临时放置a变量时,将f放入a的位置后,我们不能直接将a变量直接放入f中,这样会造成\0判断出错,所以f的位置应该放入\0。然后需要注意的一点是,在判断是否继续调用的时候,每次测量长度都应该将str+1,然后再将字符串测量长度。
源代码:
#include<stdio.h>
int my_strlen(char*str) { ?? ?int count = 0; ?? ?while (*str !='\0') ?? ?{ ?? ??? ?count++; ?? ??? ?str++; ?? ?} ?? ?return count; } void reverse_string(char*str) { ?? ?int len = my_strlen(str); ?? ?char tmp = str[0]; ?? ?str[0] = str[len - 1]; ?? ?str[len - 1] = '\0'; ?? ?if (my_strlen(str + 1) >= 2) ?? ?{ ?? ??? ?reverse_string(str + 1); ?? ?} ?? ?str[len - 1] = tmp;
} int main() { ?? ?char arr[50] = {0}; ?? ?scanf("%s", arr); ?? ?//数组名是首元素的地址 ?? ?//首元素就是char类型,即char* ?? ?reverse_string(arr); ?? ?printf("%s\n", arr);//期望结果是fedcba ?? ?return 0; }
|