c - 是否有用于将字符串与字符表进行比较的 C 函数?
问题描述
IBM 的 REXX 语言有一个名为VERIFY的函数,它执行我正在寻找的功能:
给定两个字符串:string和reference:
返回一个数字,默认情况下,指示string是否仅由reference中的字符组成;如果string中的所有字符都在引用中,则返回 0 ,或者返回string中第一个字符的位置,而 不是在引用中。
例如,我想搜索一个字符串以确保它只包含元音:
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
推荐阅读
- php - 如何链接到页面的特定部分 HTML PHP
- c# - 当后端代码中的简单键值变量工作相同时,为什么要使用 redis 作为缓存层?
- google-apps-script - Google Slides Apps 脚本检索页面中的形状
- python-3.x - 在 KNeighborsClassifier 中使用自定义指标时,我不断收到“TypeError:只有整数标量数组可以转换为标量索引”
- java - JavaFX - 在使用选项卡时将 GUI 拆分为单独的类
- jquery - 通过函数调整电子窗口大小
- scheme - 匹配方案中的括号
- android - 当我使用 adb 显示 /sys/kernel/debug/tracing/available_filter_functions 时没有这样的设备
- python - 初始化以迭代抽象pyomo模型中的集合?
- angular-cli - 运行 ng serve -o 时出现错误