c语言求字符串逆序结果的两种方法
1.利用函数调用
#include<stdio.h>
#include<string.h>
void reverse_string(char* arr)
{
int left = 0;
int right = strlen(arr) - 1;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
本质就是交换:连续进行交换左右对称位置的字符,所以运用到了while循环;而while循环的条件就是对称位置有可进行交换的字符:(1)left<right,继续进行交换;(2)left=right,是否交换不影响结果。当left>right时说明交换已经结束,则退出循环。
2.利用函数递归
#include<stdio.h>
#include<string.h>
void reverse_string(char* str)
{
char tmp = *str;
int len = strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (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;
}
基本原理:1.首先取出第一个字符串;2.将与其对称位置的字符串放在第一个字符串原有的位置上;3.将最后一位空余出来的位置放上\0;4.求剩下的字符串的逆序(字符串逐渐减少,问题逐渐简化,符合函数递归的思想)5.最后把a放到最后一个位置
体现在代码中:
1.第一步首先为第一个字符串开辟一个新的位置用于储存该字符串——char tmp=*str
2.进行交换:*str=*(str+len-1),str+len-1,就代表最后一个字符串的位置,len是利用strlen函数计算过的字符串的长度
3.将原来的最后一个字符串的位置上放上\0——*(str+len-1)='\0',方便继续求剩下的字符串的逆序,防止空位置干扰逆序过程的进行。
4.调用函数求剩下的字符串的逆序
5.把a放到字符串的最后的位置——*(str+len-1)=tmp
最终完成整个递归过程