相关疑难解决方法(0)

在C中匹配(几个)字符串的最有效方法?

我们的系统需要接受来自终端的用户输入并匹配一些已知的关键字字符串(可能是10).

我们没有空间/ computrons来做regexp等,代码需要很小和快速.

现在,令人讨厌的方法是:

   // str is null-terminated, assume we know it's safe/sane here
   if(!strncmp(str,"hello",5)
   {
      do_hello();
   }
   else if(!strncmp(str,"world",5)
   {
      do_world();
   }
   else
   {
      meh(); // Wasn't a match
   }
Run Code Online (Sandbox Code Playgroud)

因此,经过一些谷歌搜索和阅读后,我确信更好的方法是将各种匹配的哈希值预先计算为int,然后只使用case语句:

// Assume hash() stops at NULL
switch(hash(str))
{
   case HASH_OF_HELLO:
      do_hello();
      break;

   case HASH_OF_WORLD:
      do_world();
      break;

   default:
      meh();
      break;
}
Run Code Online (Sandbox Code Playgroud)

我们可以在编译时计算*HASH_OF_match*.这似乎是一种从相对较小的集合中选择字符串的更快/更优雅的方式.

那么 - 这看起来合情合理吗?这样做有明显的问题吗?/任何人都有更优雅的方式吗?

作为一个脚注,这是我今天下午看到的最好看的哈希算法;),归功于丹·伯恩斯坦,它看起来就像手头的工作.

unsigned int
get_hash(const char* s)
{
    unsigned int hash = 0;
    int c;

    while((c = *s++))
    {
        // hash = hash * 33 …
Run Code Online (Sandbox Code Playgroud)

c string embedded match

3
推荐指数
1
解决办法
734
查看次数

标签 统计

c ×1

embedded ×1

match ×1

string ×1