c - 是否有用于将字符串与字符表进行比较的 C 函数?

标签 c string rexx

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/

相关文章:

c++ - 是否可以将输入用作对字符串的调用?

debugging - 如何调试Rexx代码?

c - C中setjmp和longjmp的实际使用

c - a2oj 对我提交的 193 显示错误答案。?

c++ - 使用 str.at(x) 将字符串转换为 int

c++ - 为什么这两种输入字符串的方法都有效?

mainframe - 如何通过 JCL 将参数传递给 REXX 程序

REXX命令获取卷上数据集的dataset列表(对比3.4 "P"for Print data set list)

java - Android NDK OpenGL ES 渲染图形到 Java 位图

c - For循环在执行条件为false后仍然递增