目录
代码要求
代码实现
代码逻辑
逆序字符串,不使用递归实现(推荐)
代码要求
- 编写一个函数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);//将当前字符串中第一个字符临时存储到tmpchar 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;
}