我一直在从事一个需要验证字符串中的字符的项目。
例如,我的一组有效字符是“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/