是否有用于将字符串与字符 table 进行比较的 C 函数?

Is there a C function for comparing a string against a character table?

IBM 的 REXX 语言有一个名为 VERIFY 的函数可以执行我正在寻找的功能:

给定两个字符串:stringreference:

returns a number that, by default, indicates whether string is composed only of characters from reference; returns 0 if all characters in string are in reference, or returns the position of the first character in string not in reference.

例如,我想搜索一个字符串以确保它包含元音:

str = "foo bar"        /* search string                     */
ref = "aeiou"          /* reference string                  */
loc = VERIFY(str, ref) /* "1" (in REXX, indexes start at 1) */

是否有 C 函数可以执行此操作?到目前为止,我能找到的所有内容都涉及在循环中对每个字符(很多 OR)进行手动测试。

是的,strspn() 函数将执行您想要的操作。细节上与REXX的VERIFY略有不同,但你可以用它来进行同样的测试。

具体来说,strspn() 计算由指定集中的字符组成的测试字符串的初始段的长度。如果整个字符串由指定集合中的字符组成,这将为您提供不在集合中的第一个字符的(从零开始的)索引,或者字符串的长度(这是其终止符的索引)。注意 0 return 值的意义必然不同。对于 strspn(),表示索引 0 处的字符不在集合中(或者,作为一种特殊情况,输入字符串为空)。

通过查看 returned 索引处的字符值,您可以轻松判断整个字符串是否由测试集中的字符组成:

char *str = "foo bar";          /* search string                     */
size_t loc;

loc = strspn(str, "aeiou");       // returns 0
printf("%d\n", (str[loc] == 0));  // prints  0

loc = strspn(str, "abfor");       // returns 3
printf("%d\n", (str[loc] == 0));  // prints  0

loc = strspn(str, " abfor");      // returns 7
printf("%d\n", (str[loc] == 0));  // prints  1