gpt4 book ai didi

sscanf可以用来匹配通配符吗?

转载 作者:行者123 更新时间:2023-12-02 03:46:10 25 4
gpt4 key购买 nike

例如,考虑一个 C 字符串数组,所有数字

..."12334", "21335", "24335"...

我想知道这些字符串中有多少与此通配符掩码匹配

**33* (where * = any digit 0-9)

我可以使用 sscanf(str, mask, ...) 来完成此任务吗?格式 "%1d%1d%[3]%[3]%1d" 似乎比我想要的更匹配(当 33 不存在时)和 "%1d%1d33% 1d" 似乎表现得很奇怪,匹配一些但不是所有匹配的条目。

我的代码中的上下文:

if (sscanf(array[i], mask, &a1, &a2, &a3) == 3)

3 是匹配的通配符位数。

最佳答案

假设您的输入都是数字,则格式“%1d%1d33%1d”应该是正确的。但您还没有告诉我们它失败的具体输入是什么。您应该考虑字符串 "1 2334""1\n\n233\t 4" 实际上会匹配,因为 %d 会吃掉空格直到找到整数。

请注意,如果您使用“%2d33%1d”,情况会更糟,因为 2 字符整数可能是带有负数的单个数字。

如果还不明显,使用 sscanf 进行此类匹配是不合适的。您最好使用正则表达式库,它在此类事情上表现出色。

但是,如果您只是想要快速有效的方法,到目前为止最简单的方法是结合使用短路评估和 isdigit。您甚至不需要检查字符串长度:

int matches( const char * s )
{
return s
&& isdigit(s[0])
&& isdigit(s[1])
&& '3' == s[2]
&& '3' == s[3]
&& isdigit(s[4]);
}

关于sscanf可以用来匹配通配符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40777790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com