比较许多const char*和一个const char*

Hem*_*ava 2 c

今天可能是基本的.

我有一个输入作为const char*,我想将它与const char*的许多选项进行比较.像我在下面写的那样.

str_equal - 将其视为const char*的比较函数.'str'是输入const char*.

所以,写成这样:

bool function1(const char* str) {
  if (str_equal(str, "abc")) {
    // Do for abc
  } else if (str_equal(str, "def")) {
    // Do for def
  } else if (str_equal(str, "ghi")) {
    // Do for ghi
  } ...
  ...
}
Run Code Online (Sandbox Code Playgroud)

想知道实现这一目标的其他可行方法是什么.如你所见,它看起来非常难看.

unw*_*ind 5

我会使用一组结构:

static bool do_abc(void)
{
  // ...
}

bool dispatch(const char *str)
{
  static const struct {
    const char *key;
    bool (*func)(void);
  } funcs[] = {
    { "abc", do_abc },
    { "def", do_def },
    { "ghi", do_ghi },
  };
  for (size_t i = 0; i < sizeof funcs / sizeof *funcs; ++i)
  {
    if(strcmp(funcs[i].text, str) == 0)
      return funcs[i].func();
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

这假设所有函数都具有相同的签名,否则很难概括.

顺便说一下,这可以称为"数据驱动代码"的一个例子,这通常很好.