文章目录
- 递归
- 非递归
1.递归
用C语言实现字符串逆序,不使用库函数,首先采用递归的方法
代码如下(示例):
//1.递归
//当遍历至最后一位字符串时,来到上面if处,满足*p == '\0',开始打印
//在栈区,变量先进后出,可以实现逆序
#include<stdio.h>
char reverse_t(char* p)
{
if (*p == '\0')//如果指针指向\0,说明遍历字符串的所有字符,此时返回return 0;
return 0;
else
reverse_t(p + 1);//如果还没有到字符串末尾,则指针+1,来到下一个字符处
printf("%c", *p);
}
int main()
{
char a[] = { 0 };
while (scanf("%s", a) != EOF)
{
reverse_t(a);
printf("\n");
}
return 0;
}
2.非递归
依旧单独构造函数,采用指针的方法
代码如下(示例):
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse_t(char* p)
{
assert(p);
char* left = p;
char* right = p + (strlen(p) - 1);//求出字符串最后一位指针所指的字符
while (left < right)//遍历时左边小于右边,当左右相等,也不用再继续
{
char temp = *left;//交换左右两边的字符,实现逆序
*left = *right;
*right = temp;
left++;//左右不断逼近,直至左边大于等于右边,循环停止
right--;
}
}
int main()
{
char a[] = { 0 };
while (scanf("%s", a) != EOF)
{
reverse_t(a);
printf("%s", a);
printf("\n");
}
return 0;
}
总结
无论递归还是非递归,都采用单独构造函数的方式,并且使用指针实现。