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)循环进行手动测试。
答案 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