有C函数可以将字符串与字符表进行比较吗?

时间:2020-04-20 02:58:32

标签: c string rexx

IBM的REXX语言具有一个名为VERIFY的函数,该函数可以执行我要寻找的内容:

给出两个字符串: string reference

返回一个数字,默认情况下,该数字指示 string 是否仅由 reference 中的字符组成;如果 string 中的所有字符都在 reference 中,则返回0,或者返回 string 中的第一个字符的位置 not 引用中。

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

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

有C函数可以做到这一点吗?到目前为止,我所能找到的所有内容都涉及对每个字符(许多OR)循环进行手动测试。

1 个答案:

答案 0 :(得分:4)

是的,strspn()函数将执行您想要的操作。详细信息与REXX的VERIFY略有不同,但是您可以使用它来执行相同的测试。

具体地说,strspn()计算测试字符串的初始段的长度,该字符串由指定集合中的字符组成。如果整个字符串由指定集中的字符组成,则将为您提供第一个字符(从零开始)的索引(从零开始),或者为字符串的长度(即其终止符的索引)。请注意,0返回值的重要性必然不同。对于strspn(),它指示索引0处的字符不在集合中(或者在特殊情况下,输入字符串为空)。

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

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