免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gaochang2008
打印 上一主题 下一主题

[算法] 不简单的strlen长度计算, [复制链接]

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
51 [报告]
发表于 2009-05-13 18:58 |只看该作者
牛人什么时候都有,今年特别多

论坛徽章:
0
52 [报告]
发表于 2009-05-13 19:42 |只看该作者
又是考递归

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09IT运维版块每日发帖之星
日期:2015-09-14 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-16 16:34:21
53 [报告]
发表于 2009-05-13 19:59 |只看该作者
原帖由 daybreakcx 于 2009-5-13 18:44 发表
为了避免输出其他信息,在41楼基础上改成这样
int Strlen(char* p)
{
        return (sprintf(p,p));
}
当然,对于常量字符串就不行了,会出错的


#include <stdio.h>

int mystrlen(char *p);

int main() {
        char *p = "abcdefg";
        printf("length is: %d\n", mystrlen(p));

        return 0;
}

int mystrlen(char *p) {
        return (sprintf(p,p));
}

在tc2.0下,结果:
length is: 0

在C-Free下:运行时出现
“应用程序错误”对话框。

论坛徽章:
0
54 [报告]
发表于 2009-05-13 20:18 |只看该作者

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main (void)
  4. {
  5.   char *msg = "hello world";
  6.   if (strcspn (msg, "") == strlen (msg))
  7.     printf ("done\n");
  8. }
复制代码

论坛徽章:
0
55 [报告]
发表于 2009-05-13 21:05 |只看该作者
在SICP中这种思想用到很多,慢慢体会吧

论坛徽章:
0
56 [报告]
发表于 2009-05-13 21:18 |只看该作者
学习了

论坛徽章:
0
57 [报告]
发表于 2009-05-13 23:58 |只看该作者
原帖由 langue 于 2009-5-13 09:32 发表
其实题目有个小问题。strlen() 返回的是 size_t。


size_t  的实际 类型是不是 unsigned int?

论坛徽章:
0
58 [报告]
发表于 2009-05-14 00:11 |只看该作者
原帖由 lxjlan 于 2009-5-13 23:58 发表


size_t  的实际 类型是不是 unsigned int?


不一定是 有时它是unsigned __int64

论坛徽章:
0
59 [报告]
发表于 2009-05-14 00:19 |只看该作者
原帖由 gaochang2008 于 2009-5-12 22:35 发表
去一个公司面试,面试让我写一个 strlen的实现
int strlen(char *p)  // 注意! 不允许定义任何变量
{}

我当时的答复是: 无解得题目,,

你们谁有办法实现??

这样行不?
int strlen(char *p)
{
    return (sizeof(p)/sizeof(char) - 1);
}

论坛徽章:
0
60 [报告]
发表于 2009-05-14 09:21 |只看该作者
原帖由 xinglp 于 2009-5-13 17:52 发表
static inline uint32_t _StrLen(char* p)
{
        if('\0'==p[0])return 0;
        if('\0'==p[1])return 1;
        if('\0'==p[2])return 2;
        if('\0'==p[3])return 3;

        for(*(uin ...




使用范围太狭窄了

_Strlen("aabbccdd"); // error
p = "aabbccdd";
_Strlen(p); // error
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP