Comparing using an if () else if () chain is a linear search, offering O(n) time complexity. For a large number of strings, one option is using bsearch() (binary search) to achieve O(log n) time complexity. Below is an example of my use of bsearch to perform a given action based on an input string. (Specifically, my example finds a given mathematical function by name).
static int c(const void *const restrict a, const void *const restrict b) {
return strcmp(*(const char *const *)a, *(const char *const *)b);
}
static double (*func(const char *const str))(double) {
static const char *const s[] = {"abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", "cbrt", "cos", "cosh", "ln", "log", "sin", "sinh", "sqrt", "tan", "tanh"};
static double (*const f[])(double) = {fabs, acos, acosh, asin, asinh, atan, atanh, cbrt, cos, cosh, log, log10, sin, sinh, sqrt, tan, tanh};
const char *const *const r = bsearch(&str, s, sizeof(s)/sizeof(*s), sizeof(*s), c);
return r ? f[r-s] : NULL;
}