免费注册 查看新帖 |

Chinaunix

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

请教大虾们,一个程序效率问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-20 17:11 |只看该作者
评论很精彩,小生受教了。
总结一下:
学习时应该深度探索------这叫“掘地三尺”
做项目时应把精力放在安全性、高可维护性、健壮性上面-----这叫不屈小节。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
12 [报告]
发表于 2009-03-20 18:05 |只看该作者
else if(strcmp())
else if(strcmp())
else if(strcmp())
....

编译器能优化成switch?

论坛徽章:
0
13 [报告]
发表于 2009-03-20 19:23 |只看该作者
原帖由 xinglp 于 2009-3-20 18:05 发表
else if(strcmp())
else if(strcmp())
else if(strcmp())
....

编译器能优化成switch?


大多数编译器的switch是基于整型的,对于字符串的处理不能直接变化为switch,仅能间接转换为switch,但这样就失去switch本来的意义了.

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
14 [报告]
发表于 2009-03-20 19:34 |只看该作者
原帖由 xinglp 于 2009-3-20 18:05 发表
else if(strcmp())
else if(strcmp())
else if(strcmp())
....

编译器能优化成switch?

不知道有不有这么好的编译器
有一些技巧可以用

switch(str[0])
{
    case 'a':
    if(strcmp()){
    }
    else if(strcmp()){
    }
    break;
    case 'b':
    if(strcmp()){
    }
    else if(strcmp()){
    }
    break;
    .........
}

论坛徽章:
0
15 [报告]
发表于 2009-03-20 19:37 |只看该作者
原帖由 yecheng_110 于 2009-3-20 19:34 发表

不知道有不有这么好的编译器
有一些技巧可以用

switch(str[0])
{
    case 'a':
    if(strcmp()){
    }
    else if(strcmp()){
    }
    break;
    case 'b':
    if(strcmp()){
    }
  ...


当然可以,不过这里的 case 'a' 编译器一般还是会当作整型来处理(把'a'当作一个数).

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
16 [报告]
发表于 2009-03-20 19:43 |只看该作者
原帖由 system888net 于 2009-3-20 19:37 发表


当然可以,不过这里的 case 'a' 编译器一般还是会当作整型来处理(把'a'当作一个数).

是的
所以是个技巧嘛

论坛徽章:
0
17 [报告]
发表于 2009-03-20 19:47 |只看该作者
原帖由 yecheng_110 于 2009-3-20 19:43 发表

是的
所以是个技巧嘛


说的好!
同意.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
18 [报告]
发表于 2009-03-20 20:10 |只看该作者
原帖由 yecheng_110 于 2009-3-20 19:34 发表

不知道有不有这么好的编译器
有一些技巧可以用

switch(str[0])
{
    case 'a':
    if(strcmp()){
    }
    else if(strcmp()){
    }
    break;
    case 'b':
    if(strcmp()){
    }
  ...


自己倒是这么写,有时甚至2层三层switch,海量的就用rbtree

论坛徽章:
0
19 [报告]
发表于 2009-03-20 21:43 |只看该作者
原帖由 xinglp 于 2009-3-20 20:10 发表


自己倒是这么写,有时甚至2层三层switch,海量的就用rbtree


好,多探索好.

论坛徽章:
0
20 [报告]
发表于 2010-05-23 11:00 |只看该作者
原来真的是一样的效率的!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP