为了账号安全,请及时绑定邮箱和手机立即绑定

在C中打开字符串的最佳方法

在C中打开字符串的最佳方法

C
莫回无 2019-11-15 13:04:32
在C语言中,有一种switch结构,可以使它根据测试整数值执行不同的条件代码分支,例如,int a;/* Read the value of "a" from some source, e.g. user input */switch ( a ) {case 100:  // Code  break;case 200:  // Code  break;default:  // Code  break;}对于字符串值(即a),如何获得相同的行为(即避免所谓的“ if- else梯形图”)char *?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

如果您有很多情况,并且不想写大量strcmp()电话,则可以执行以下操作:


switch(my_hash_function(the_string)) {

    case HASH_B1: ...

    /* ...etc... */

}

您只需要确保您的哈希函数在该字符串的可能值集中没有冲突。


查看完整回答
反对 回复 2019-11-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

用C语言无法做到这一点。有许多不同的方法。通常,最简单的方法是定义一组代表您的字符串的常量,然后按字符串进行查找以获取常量:


#define BADKEY -1

#define A1 1

#define A2 2

#define B1 3

#define B2 4


typedef struct { char *key; int val; } t_symstruct;


static t_symstruct lookuptable[] = {

    { "A1", A1 }, { "A2", A2 }, { "B1", B1 }, { "B2", B2 }

};


#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))


int keyfromstring(char *key)

{

    int i;

    for (i=0; i < NKEYS; i++) {

        t_symstruct *sym = lookuptable[i];

        if (strcmp(sym->key, key) == 0)

            return sym->val;

    }

    return BADKEY;

}


/* ... */

switch (keyfromstring(somestring)) {

case A1: /* ... */ break;

case A2: /* ... */ break;

case B1: /* ... */ break;

case B2: /* ... */ break;

case BADKEY: /* handle failed lookup */

}

当然,有更有效的方法可以做到这一点。如果对键进行排序,则可以使用二进制搜索。您也可以使用哈希表。这些事情以牺牲维护成本为代价来改变您的性能。


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 433 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信