不使用for、while等循环实现strlen()函数
2014-01-08 19:14
381 查看
网上闲逛偶然看到个题目,题目描述如下:
不使用库函数,不使用 while for循环,实现strlen求字符串长度函数。
解法一:递归(要深刻理解递归)
思想描述:递归就是一个函数不断调用自身的过程,直到找到函数出口(核心:①、递归关系;②、出口)。
本题目中,每递归一次,字符串指针后移动一个字符,直到遇到结束符‘\0’,返回值为0,找到出口,结束。代码如下:
解法二:被“遗弃”了的goto
思想描述:我们学C语言的时候直到,C语言有个关键字goto,其作用是跳转,但是一般建议能不使用就不要使用,我们这里就使用一次。代码如下:
可以联想到C语言里,还有一个运算符,没没用到if、else关键字,但是也能达到判断的效果,那就是双目运算符。
欢迎大家批评指正!
不使用库函数,不使用 while for循环,实现strlen求字符串长度函数。
解法一:递归(要深刻理解递归)
思想描述:递归就是一个函数不断调用自身的过程,直到找到函数出口(核心:①、递归关系;②、出口)。
本题目中,每递归一次,字符串指针后移动一个字符,直到遇到结束符‘\0’,返回值为0,找到出口,结束。代码如下:
int fun_len1(char *p) { if (*(p++) != '\0') return fun_len1(p) + 1; else return 0; }
解法二:被“遗弃”了的goto
思想描述:我们学C语言的时候直到,C语言有个关键字goto,其作用是跳转,但是一般建议能不使用就不要使用,我们这里就使用一次。代码如下:
int fun_len3(char *p) { int len = 0; if (p == NULL) return len; mark: len++; p++; if (*p != '\0') goto mark; return len; }改进一下,假设题目要求不能使用if、else等关键字,我们该如何处理?
可以联想到C语言里,还有一个运算符,没没用到if、else关键字,但是也能达到判断的效果,那就是双目运算符。
expression ? value1 : value2思路和解法一完全一样,代码如下:
int fun_len2(char *p) { return *(p++) ? fun_len2(p)+1 : 0; }
欢迎大家批评指正!
相关文章推荐
- 使用for、while 以及repeat-break实现循环语句
- 在不使用if,while,do...while,for,switch,?:等操作,实现函数void printLess(int k),返回小于k的所有整数
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。
- 十进制转二进制-使用do while 、while 、for循环实现-C描述
- 使用矩阵运算替代 for 循环实现信号的DTFT
- C++不使用变量求字符串长度strlen函数的实现方法
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 实现1+2+3+...+n。要求不能使用乘除法,for,while,if,else,switch,case,等关键字及条件判断语句。
- 【03】for和while循环关键字,函数基本概念
- Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
- c语言中不用while,for,do-while实现循环
- for+next()实现数组的遍历及while list each 的使用
- Oracle三种循环(For、While、Loop)实现九九乘法表
- 使用while循环实现xyz+yzz=532
- pow()函数中求次方的代码,分别用 for 循环和 while 作解析
- Python基础语法(2)——字典、函数定义使用、控制流(if&for&while)
- for循环中的循环次数无法更改,可用while实现
- 李白无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少酒?(使用FOR循环结构编程实现)
- PL/SQL语句学习之使用while、loop和for三种循环打印数字的1-10
- for循环的使用 反转字符串,手写strrev()函数 解决问题