您的位置:首页 > 其它

不使用for、while等循环实现strlen()函数

2014-01-08 19:14 381 查看
网上闲逛偶然看到个题目,题目描述如下:

不使用库函数,不使用 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;
}


欢迎大家批评指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐