题目描述:
这里我们采用两种办法来解决这道题:
第一种使用常规的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;
}