有没有用于将字符串与字符表进行比较的C函数?

4

IBM的REXX语言有一个名为VERIFY的函数,可以实现我想要的功能:

给定两个字符串:stringreference:

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

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

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

有没有一个C函数可以做到这一点?到目前为止,我找到的所有方法都涉及在循环中手动测试每个字符(大量使用OR)。


2
关于http://www.cplusplus.com/reference/cstring/strspn/,它返回匹配的子字符串的大小,因此返回的值指向第一个不匹配的字符。 - Jerry Jeremiah
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接