IBM 的 REXX 语言有一个函数叫 VERIFY执行我正在寻找的内容:
给定两个字符串:字符串和引用:
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
的意义返回值必然不同。对于 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
关于c - 是否有用于将字符串与字符表进行比较的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61314467/