【发布时间】:2016-12-11 21:09:07
【问题描述】:
我正在寻找一个函数来检查字符串是否遵循(完全匹配)由对应于format 字符串的附加参数指定的数据模式
像这样:
/* 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;
我认为自己实现这个功能会非常困难,但这样的功能对于内容的语义解析可能非常有用。在我尝试自己编写这样的函数之前,我需要知道是否已经有一个库或代码 sn-p 提供了这样的函数的实现?
更具体地说,我需要模式匹配行为。所以test必须与format参数对应的数据所指定的模式完全匹配。
【问题讨论】:
-
实现这样的功能很简单,只需使用
vsnprintf进行格式化,然后调用strcmp即可。 -
@JoachimPileborg 非常正确,但是如果我必须将它放在一个函数中,同时调用
strcmp(),我仍然需要为函数提供可变参数。对于每个人来说,哪个不是“非常简单”的,你不同意吗?至少对我来说似乎不太实用.. -
@KerrekSB 不是,我只是说创建一个格式化字符串然后使用
strcmp的函数很容易。如果没有正确调用它是另一个问题。 :) -
@JoachimPileborg:我的理解是 OP 想要模式匹配,例如“你好”后跟任何内容,然后是“!”。这不仅仅是固定字符串比较。也许我误解了 OP 或您提出的解决方案?
-
对我来说也不清楚的是,您需要模式匹配行为,而不是简单地格式化字符串并将格式化结果与目标字符串进行比较。如果您希望引入模式匹配,那么我建议您查看该部分的正则表达式库(并为此适当设计您的包装函数)。
标签: c string formatting string-comparison c-libraries