C语言简单递归实现字符串逆序输出
2017-01-07 15:14
1221 查看
题目内容的 “注意” 已经侧面规定了要用递归来实现:
输入是一个可能含有空格的串说明要用gets来读入字符串,如果利用scanf的话是无法读入一段含有空格的串。
下面先上一般方法:
#include "stdio.h" #include "string.h" char *reverse(char *str) { if( !str ) //判断输入字符串是否为空串 { return NULL; //若为空串则返回NULL } int len = strlen(str); if( len > 1 ) { char ctemp =str[0]; str[0] = str[len-1]; str[len-1] = '\0'; // 最后一个字符在下次递归时不再处理 reverse(str+1); // 递归调用 str[len-1] = ctemp; } return str; } int main() { char str[100]; gets(str); reverse(str); puts(str); return 0; }
这个char型函数返回字符串的首位,简单的利用字符串首位和尾位交换,得到逆序的字符串。
但是题干只要你输出逆序后的字符串,也就有了更简单的方法:
#include "stdio.h" void fun(char *x) { if(*x){ //若该字符型变量为0(ascii码值为0,不是数字'0')的字符则不进入 fun(x+1); //递归调用 printf("%c",*x); //输出单个字符 } } int main() { char str[100]; gets(str); fun(str); return 0; }
这个递归函数是void型函数,递归的作用是,每次读入一个字符串中的字符,先不执行递归中的printf,递归到最后一个字符的后面是0,则结束,从最后一次的递归的printf依次反向执行,从而实现逆序输出的作用。
这个函数很简单,但对于小白来说,来理解这个递归也是比较复杂的。(我写的时候画了个内存图来帮助理解)
第一个递归函数是将字符串逆序处理了,输出要在主函数中输出。
第二个递归函数是在递归中从最后一个字符依次输出字符。
END
2333,第一次写博客,大一刚接触C语言几个月,如果有错误,多谢指出,共同学习才是坠吼的!
相关文章推荐
- 字符串的逆序递归实现 C语言实现
- 逆序输出字符串(递归实现)
- c语言实现字符串的逆序输出
- 简单C语言递归实现进制转换并输出
- JAVA递归实现字符串逆序输出
- 一个简单的递归——逆序输出字符串
- 用递归实现字符串的逆序输出
- C语言:用递归实现将输入的整数按逆序输出。如输入12345,则输出54321。
- C语言实现对字符串的逆序输出
- 递归实现逆序输出字符串
- 递归实现字符串逆序输出(c++和c)
- 【C语言】用递归实现字符串逆序的曲折之路
- java 用递归实现:输入一个整数,用字符串逆序输出,例如输入123,输出321 ,不使用全局变量
- 用不同的方法实现字符串的逆序输出(C语言实现)
- 《任意输入一个合理大小的字符串,实现逆序输出并统计一个字符串中字母、数字、空格及其他字符的个数》
- 输入三个字符串,按由小到大的顺序输出(指针)(C语言的实现)
- 4种方法实现字符串逆序输出
- 递归实现反向输出字符串
- 通过实现字符串的正向输入逆向输出验证递归调用
- 多种方式实现字符串/无符号数反向输出_栈_递归_头尾指针