| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2510 人关注过本帖
标题:不用变量实现strlen功能
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

无聊,借了用google的ID一用


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-05 21:08
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
晕,老K马夹真多

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2007-09-05 21:10
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
少了个return

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-05 21:12
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
int MyStrlen(const char *p)
{
if(!*p) return 0;
else return(1+MyStrlen(p+1)); // 帮你补上!的确是好方法~
}

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2007-09-05 21:14
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

说实话,还是你的好


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-05 21:18
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
以下是引用Knocker在2007-9-5 21:18:20的发言:

说实话,还是你的好

递归虽然时间上慢了点,不过思路很别致


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2007-09-05 21:21
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

[CODE]#include <stdio.h>
int MyStrlen(char *p)
{
return ( MyFoo(p) - (int)p )/sizeof(char) ;
}
int MyFoo(char *p)
{
if(!(*p)) return (int)p;
else MyFoo(p+1);
}
int main()
{
printf("%d\n", MyStrlen("Hello"));
return 0;
}[/CODE]

C标准肯定行得通,c++标准就难说了


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-05 21:54
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
恩,用递归也是一个好方法

来一个不用递归的吧

#include <stdio.h>
int my_strlen(char *s)
{
return (char *)strchr(s, '\0') - s;
}


int main()
{
char *s = "1234567";

printf("%d\n",my_strlen(s));
}


Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-09-06 09:05
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
收藏
得分:0 

给递归的加个参数检查:

int MyStrlen(const char *p)
{
return p ? (!*p) ? 0 : 1 + MyStrlen(p + 1) : -1;
}

当传入指针为NULL时安全返回,返回植-1。

2007-09-06 09:28
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 

int maxlen(char *s)
{
while(*s)
{
s++;
}
return (int)s;
}

int str_len(char *s)
{
return (maxlen(s)-(int)&s[0]);
}

int main()
{
printf("len:%d\n",str_len("strlen"));
}


编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-06 09:38
快速回复:不用变量实现strlen功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023332 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved