目录
代码要求
- 编写一个函数reverse_string(char* string) (递归实现)
- 实现:将参数字符串中的字符反向排列,不是逆序打印
- 要求:不能使用C函数库中的字符串操作函数
代码实现
#include<stdio.h>
//计算字符串长度
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
//判断字符串是否为空
if (*str == '\0')
return;
//计算当前字符串长度
int len = my_strlen(str);
//将当前字符串中第一个字符临时存储到tmp
char tmp = *(str + 0);
//将当前字符串中最后一个字符存储到当前字符串中第一个字符的位置
*(str + 0) = *(str + len - 1);
//将当前字符串中最后一个字符的位置存储'\0'
*(str + len - 1) = '\0';
//逆序
if (my_strlen(str + 1) >= 2)
{
reverse_string(str + 1);
}
//交换
*(str + len - 1) = tmp;
}
int main()
{
//输入
char arr[] = "abcdef";
//逆序
reverse_string(arr);
//输出
printf("%s\n", arr);
return 0;
}
代码逻辑
举例说明:reverse_string("abcdef")
- 先将当前字符串的第一个字符 a 临时存储在 tmp 变量中
- 此时第一个字符的内容就可以被改为当前字符串最后一个字符 f
- 再将最后一个字符的内容改为'\0'
- 重新调用reverse_string函数,此时调用前reverse_string("fbcde")
- 重复往返,第二次调用reverse_string("fecd")
- ………………
- 最后递归返回reverse_string("fedcba")
逆序字符串,不使用递归实现(推荐)
#include<stdio.h>
//计算字符串长度
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
//判断
if (*str == '\0')
return;
//左下标
int left = 0;
//右下标
int right = my_strlen(str) - 1;
//两端分别交换,向中间靠拢
while (left < right)
{
char tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
//输入
char arr[] = "abcdef";
//逆序
reverse_string(arr);
//输出
printf("%s\n", arr);
return 0;
}