是否有用于将字符串与字符 table 进行比较的 C 函数?
Is there a C function for comparing a string against a character table?
IBM 的 REXX 语言有一个名为 VERIFY 的函数可以执行我正在寻找的功能:
给定两个字符串:string 和 reference:
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
IBM 的 REXX 语言有一个名为 VERIFY 的函数可以执行我正在寻找的功能:
给定两个字符串:string 和 reference:
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