免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: yecheng_110

多个strcmp比较的时候大家是怎么做的? [复制链接]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
发表于 2017-12-21 09:56 |显示全部楼层
scuhkr 发表于 2008-01-17 10:57
呵呵。很替22楼lgfang可惜。
提了trie没人搭理。^_^
其实trie是很好的算法。推荐使用。

也不用可惜,后来还是学习了trie的

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2017-12-22 20:58 |显示全部楼层
yecheng_110 发表于 2007-07-17 09:28
多个strcmp比较的时候大家是怎么做的?

一般有几个strcmp都是这样做的

map,hashmap.

我做过这事,时间敏感的。百多个名字中找一个。hash比顺序耗时1/10。

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
发表于 2018-01-07 19:32 |显示全部楼层
出于可读性和性能的原因,
一般高手都是这样做的,
程序很简洁,维护也很简单

GET action = 0
SET action = -1
HEAD action = 0
POST action = 2

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef enum {
  5.     M_NOACTION = -1,
  6.     M_GET,
  7.     M_PATCH,
  8.     M_POST,
  9.     M_PROPFIND,
  10.     M_PROPPATCH,
  11.     M_PUT
  12. } Method;
  13. typedef struct {
  14.     char *key;
  15.     Method action;
  16. } Table;

  17. Method foo(char *);
  18. int COMPARE(const void *, const void *);
  19. int main() {
  20.     char *test[] = {"GET", "SET", "HEAD", "POST"};

  21.     for (int i = 0; i < 4; i++) {
  22.         Method m = foo(test[i]);
  23.         printf("%s action = %d\n", test[i], m);
  24.     }
  25. }
  26. int COMPARE(const void *x, const void *y) {
  27.     Table *a = (Table *)x;
  28.     Table *b = (Table *)y;
  29.     return strcmp(a->key, b->key);
  30. }

  31. Method foo(char *act) {
  32.     static Table action[] = {
  33.         {"GET", M_GET},   
  34.         {"HEAD", M_GET},         
  35.         {"PATCH", M_PATCH},
  36.         {"POST", M_POST},
  37.         {"PROPFIND", M_PROPFIND},
  38.         {"PROPPATCH", M_PROPPATCH},
  39.         {"PUT", M_PUT},
  40.     };
  41.     int size = sizeof(action) / sizeof(Table);
  42.     Table key = {.key = act};
  43.     Table *r = (Table *)bsearch(&key, action, size, sizeof(Table), COMPARE);

  44.     return r ? r->action : M_NOACTION;
  45. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP