亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: yecheng_110
打印 上一主題 下一主題

多個(gè)strcmp比較的時(shí)候大家是怎么做的? [復(fù)制鏈接]

論壇徽章:
0
31 [報(bào)告]
發(fā)表于 2008-01-08 10:56 |只看該作者
原帖由 ivhb 于 2007-7-17 09:47 發(fā)表


一般來說,羅列(并且很多)這樣的結(jié)構(gòu)都可以通過仔細(xì)設(shè)計(jì),適應(yīng)表驅(qū)動(dòng)法。
比如你可以
struct  {
  const char *name;
  int (*action)(void);
};

通過這個(gè)配置就可以把特征碼和對(duì)應(yīng)動(dòng)作捆綁,如果 ...

如果有一百多種選者,就要一百多個(gè)函數(shù)?
struct A{
    const char szName[64];
    int (*action)(void);
};
char buf[1024] = "hello world";
    if(strcmp(buf, str1) == 0) {
        return 1;
    } else if(strcmp(buf, str2) == 0) {
        return 2;
    } else {
        ...
    }

難道我要這樣?
int func1(){return 1;}
int func2(){return 2;}
A array[100] = {{str1,func1},{str2,func2}...};

[ 本帖最后由 yjm0573 于 2008-1-8 11:02 編輯 ]

論壇徽章:
0
32 [報(bào)告]
發(fā)表于 2008-01-08 11:15 |只看該作者
弱問一下

__FILE__   __LINE__

這樣的宏在那里定義, 啥意思  文件?行

論壇徽章:
0
33 [報(bào)告]
發(fā)表于 2008-01-08 11:18 |只看該作者
原帖由 lxy9805287 于 2008-1-8 11:15 發(fā)表
弱問一下

__FILE__   __LINE__

這樣的宏在那里定義, 啥意思  文件?行

文件名,行號(hào),類似的還有函數(shù)名__func__

論壇徽章:
0
34 [報(bào)告]
發(fā)表于 2008-01-08 11:18 |只看該作者
原帖由 lxy9805287 于 2008-1-8 11:15 發(fā)表
弱問一下

__FILE__   __LINE__

這樣的宏在那里定義, 啥意思  文件?行

編譯的時(shí)候內(nèi)置的宏就是代碼所在的文件和行號(hào)

論壇徽章:
0
35 [報(bào)告]
發(fā)表于 2008-01-08 11:21 |只看該作者
多謝樓上, 樓上.

論壇徽章:
0
36 [報(bào)告]
發(fā)表于 2008-01-08 14:57 |只看該作者
原帖由 yjm0573 于 2008-1-8 10:56 發(fā)表

如果有一百多種選者,就要一百多個(gè)函數(shù)?
struct A{
    const char szName[64];
    int (*action)(void);
};
char buf[1024] = "hello world";
    if(strcmp(buf, str1) == 0) {
        return 1; ...


好像是的,這種方法的好處是程序可讀性強(qiáng),且維護(hù)方便
但我在用此方法時(shí),為了避免用strcmp比較字符串,會(huì)增加一個(gè)整數(shù)的鍵值,比較的時(shí)候直接比較整數(shù),那樣更快
結(jié)構(gòu)體這樣定義
struct A {
  const char* Name;
  int Key;
  int (*ActPtr)(void);
};

struct A a[] = {
{"Name one", 1, Act1},
{"Name two", 2, Act2},
...
};


不知誰有更好的方法

論壇徽章:
0
37 [報(bào)告]
發(fā)表于 2008-01-08 17:56 |只看該作者
原帖由 kangji 于 2008-1-8 14:57 發(fā)表


好像是的,這種方法的好處是程序可讀性強(qiáng),且維護(hù)方便
但我在用此方法時(shí),為了避免用strcmp比較字符串,會(huì)增加一個(gè)整數(shù)的鍵值,比較的時(shí)候直接比較整數(shù),那樣更快
結(jié)構(gòu)體這樣定義
struct A {
  const c ...

這個(gè)優(yōu)化有必要么?
如果不是性能瓶頸,引入新的鍵值似乎得不償失?
比如以后,要對(duì)表增加,或刪除字符串時(shí),還得維護(hù)一個(gè)鍵值

我一般都直接用 hash 表,沖突的再逐個(gè) strcmp
考慮到?jīng)_突的頻率不高(高的話就得換 hash 算法了), 沒有必要為了這么點(diǎn)再優(yōu)化

論壇徽章:
1
技術(shù)圖書徽章
日期:2014-03-06 15:32:30
38 [報(bào)告]
發(fā)表于 2008-01-08 18:28 |只看該作者
能用c++么?


class handler_base {
public:
    virtual void process(PARAMETER &param) = 0;
};
typedef map<string, handler_base *> _HANDLER_MAP;

...
class C_Handler_A :public handler_base {
    void process(PARAMETER &param) {
        ...
    }
};
...
_HANDLER_MAP g_handler;

void function1 (...)
{
    ...
    g_handler.insert(value1, new C_Handler_A);
    ...
}
void function2(...)
{
    ...
    _HANDLER_MAP it = g_handler.find(value1);
    if ( it != g_handler.end() ) it->second->process(parameter);
    ...
}

論壇徽章:
1
雙子座
日期:2015-01-04 14:25:06
39 [報(bào)告]
發(fā)表于 2008-01-17 09:46 |只看該作者

  1. switch (*method) {
  2.         case 'H':
  3.            if (strcmp(method, "HEAD") == 0)
  4.                return M_GET;   /* see header_only in request_rec */
  5.            break;
  6.         case 'G':
  7.            if (strcmp(method, "GET") == 0)
  8.                return M_GET;
  9.            break;
  10.         case 'P':
  11.            if (strcmp(method, "POST") == 0)
  12.                return M_POST;
  13.            if (strcmp(method, "PUT") == 0)
  14.                return M_PUT;
  15.            if (strcmp(method, "PATCH") == 0)
  16.                return M_PATCH;
  17.            if (strcmp(method, "PROPFIND") == 0)
  18.                return M_PROPFIND;
  19.            if (strcmp(method, "PROPPATCH") == 0)
  20.                return M_PROPPATCH;
  21.            break;
  22.         case 'D':
復(fù)制代碼

其實(shí)apache的這種做法還是不錯(cuò)的

論壇徽章:
0
40 [報(bào)告]
發(fā)表于 2008-01-17 10:57 |只看該作者
呵呵。很替22樓lgfang可惜。
提了trie沒人搭理。^_^
其實(shí)trie是很好的算法。推薦使用。

其次如果比較字符串很多,可以用字符串hash方式。
個(gè)人覺得如果<50的話, for()循環(huán) 或if..else也不是很壞。

對(duì)樓主的需求, 如果確實(shí)要效率,且不考慮內(nèi)存,不如就用hash好了。
效率應(yīng)該是最高的。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP