是否存在某种'strcmpf'实现?

问题描述:

我要找来检查,如果一个字符串如下功能(完全一致),对应format串 像这样由其他参数指定的数据的模式:是否存在某种'strcmpf'实现?

/* int strcmpf (char *str1, char *format, ...); */ 
char *test = "Hello World !" 

if(!strcmpf(test, "%s%*s %c", "Hello ", '!') 
    return HELLO_HAS_BEEN_SAID; 
else 
    return PROGRAM_ISNT_POLITE; 

这个实现自己,我认为将是非常困难,但是这种功能对于内容的语义分析非常有用。在我尝试自己编写这样的函数之前,我需要知道是否已经有了一个库或代码片段来提供像这样的函数的实现?


更具体地说,我需要模式匹配行为。因此test必须完全匹配由对应于format参数的数据指定的模式。

+5

实现这样的功能非常简单,只需使用['vsnprintf'](http://en.cppreference.com/w/c/io/vfprintf)进行格式化,然后调用'strcmp'。 –

+1

@JoachimPileborg完全正确,但是如果我必须将它放在函数中,并且调用了'strcmp()',我仍然需要为该函数提供可变参数。对于每个人来说,这不是“非常简单”,你不同意吗?至少对我来说似乎不实际.. – Malina

+0

@JoachimPileborg:现在是什么? “世界”来自您提出的解决方案的地方在哪里? –

我需要知道,如果已经有一个库或代码片段,提供实现的功能的这样

标准库有没有这样的功能。对于第三方库建议的请求在这里是无关紧要的,但就我理解您所需的功能而言,我无论如何都不了解现有的第三方实施。

正如我在评论中说,我建议你设计围绕模式匹配方面善意正则表达式,而不是围绕printf()scanf()格式(这是不完全一样)。有几个正则表达式库可用于支持该部分。

+0

解释中的问题来自于我依靠人们理解为什么它是'strcmpf'而不是'sscanfcmp'我猜。 – Malina

+0

我需要这样一个函数的真正原因是为了正确解释gcc的stderr调试信息输出。那就是要知道消息的实例,错误,警告,行链接,文件路径等等:)这样我就可以突出显示特定的信息。 – Malina

+0

@Malina,为此,你可能甚至不需要正则表达式。GCC诊断由四个冒号(:)分隔的字段组成,并且您可以依靠前三个冒号区域本身不包含冒号。您只需将(前三个)冒号中的诊断文本拆分并适当地处理每个碎片。你可以用'strtok()','sscanf()'或其他各种方式分割字符串。 –