题目:编写一个函数reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数
比如:char arr[] = "abcdef";
逆序之后变成:fedcba
#include <stdio.h>
int longchar(char* string)
{
int count = 0;
while (*string != '\0')
{
count++;
string++;
}
return count;
}
void reverse_string(char* string)//(递归法)
{
char tmp = *string; //第一步:将a的地址赋值给tmp;
int len = longchar(string); //计算出字符串长度;
*string = *(string + len - 1);//第二步:将最后的f地址赋值给第一个字母的地址(相当于a和f进行交换);
*(string + len - 1) = '\0'; //第三步:将最后一个字母的地址赋值'\0';
if (longchar(string+1) >=2) //第四步:判断条件递归函数的字符串长度是否大于等于2;
{
reverse_string(string+1); //符合条件则地址右移一位调用递归函数;
}
*(string + len - 1) = tmp; //第五步:将第一位地址的字符赋值给最后一个字母地址(相当于将a放在f位);
}
int main()
{
char arr[] = "abcdef";
reverse_string(&arr);
printf("%s", arr);
return 0;
}
注:要知道使用函数计算字符串长度时为当遇到'\0'时停止。
努力将本题看懂,你的递归一定能再上一个台阶。
下面是不用递归法,就简单使用函数调度完成:
#include <stdio.h>
int longchar(char* string)
{
int count = 0;
while (*string != '\0')
{
count++;
string++;
}
return count;
}
void reverse_string(char* string)
{
char tmp;
int left = 0;
int rigt = longchar(string) - 1;
while (left < rigt)
{
tmp = string[rigt];
string[rigt] = string[left];
string[left] = tmp;
left++;
rigt--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(&arr);
printf("%s", arr);
return 0;
}