字符串中的字符与C中的一组字符的比较

标签 c string

我一直在从事一个需要验证字符串中的字符的项目。

例如,我的一组有效字符是“abcde”,其中所有字符启动不同的功能。

首先,代码要求用户输入。之后,它与这个集合进行比较以检查是否有任何无效输入(abcde 以外的任何字母)。在此之后,角色开始各自的功能。

我知道可以使用:

    for (i = 0; i <= sizeof(string) - 1; i++) {
        if (string[i] != 'a' || string[i] != 'b' || string[i] != 'c' || 
            string[i] != 'd' || string[i] != 'e') {
            printf("Invalid Input");
        }
    }

用户可以从集合中输入任意组合的三个或四个字母。

除了在 if 语句中输入整个条件外,还有更简单的方法吗?任何帮助将不胜感激。

最佳答案

编辑:多亏了指出标准 strspn() 函数的评论,我没有注意到它,我们可以像这样实现它:

const size_t num_valid = strspn(string, "abcde");
if(string[num_valid] != '\0')
  printf("Invalid input: '%s'\n", string + num_valid);

这很好,因为它将循环推出了用户代码,使其不那么复杂。

最初我声称这是 [strchr()] 的典型案例 ( https://linux.die.net/man/3/strchr ),我仍然认为它是:

for(size_t i = 0; string[i] != '\0'; ++i)
{
  if(strchr("abcde", string[i]) == NULL)
  {
    printf("Invalid input: '%c'\n", string[i]);
    break;
  }
}

关于字符串中的字符与C中的一组字符的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093713/

相关文章:

c++ - 如何将字符串转换为由 C++ 中的字符组成的字符串数组?

javascript - 将整个字符串中的大写字母替换为小写字母和连字符

c++ - 当我将它分配给 std::string 时,我可以释放 char* 字符串的内存吗?

java - 读入的文本与指定的文本不同

c - 如何编译没有main函数的C源代码?

在二叉搜索树中将前序前驱与其后继连接

c - 在两个项目之间同步单个c头文件

java String.split(regex) 设计

objective-c - 防止未使用的符号被剥离

java - 移植C代码;需要有关按位运算和指针语法的帮助