C语言 - 递归实现字符串逆序打印
Posted 跳动的bit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 - 递归实现字符串逆序打印相关的知识,希望对你有一定的参考价值。
/***********************************************************************
目的:非递归编写一个函数reverse_string(char* string)将参数字符串中的字符逆序打印发。如a b c d e f \\0 -> f e d c b a \\0 (不能使用库函数)
分析:需要定位这个字符串的左右下标,在找右下标时,因规定不能使用库函数strlen,所以my_strlen模拟实现strlen,最终循环交换即可
平台:Visual studio 2017 && windows
*************************************************************************/
实现代码:
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
//找到左右下标
int left = 0;
int right = my_strlen(str)-1 ;//不能使用strlen库函数,所以自己造一个
//交换
while(left < right)
{
char temp = str[left];//同*(str+left)
str[left] = str[right];
str[right] = temp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\\n", arr);//fedcba
return 0;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++
/***********************************************************************
目的:递归编写一个函数reverse_string(char* string)将参数字符串中的字符反向排列,不是逆序打印。如a b c d e f \\0 -> f e d c b a \\0 (不能使用库函数)
分析:两端2个字符串的交换+中间字符串的反向排列
a <-> f + b c d e
b <-> e +c d
… …
具体来说:第1步是把a存于temp;第2步是把f交换于a的位置;第3步是把原来f的位置变为\\0;第4步是递归调用reverse_string来反向排列中间的元素;第5步是将temp赋值于原来f的位置
平台:Visual studio 2017 && windows
*************************************************************************/
实现代码:
#include<stdio.h>
int my_strlen(char* str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
char temp = *str;//1
int len = my_strlen(str);
*str = *(str +len - 1);//2
*(str + len - 1) = '\\0';//3
//只有2个及以上的字符时才递归
if(my_strlen(str+1) >= 2)
{
reverse_string(str + 1);//4
}
*(str + len - 1) = temp;//5
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\\n", arr);//fedcba
return 0;
}
图解:
以上是关于C语言 - 递归实现字符串逆序打印的主要内容,如果未能解决你的问题,请参考以下文章