在我从事的一个项目中,我们最近遇到了一个问题,我们需要检查 2 个字符串是否具有字符串格式(用于翻译)。
/* A simple example: */
str = "%.200sSOMETEXT%.5fSOMEMORETEXT%d%ul%.*s%%";
/* Should be able to be validated to be the equivalent of: */
str = "%.200sBLAHBLAH%.5ftest%d%ul%.*s%%MORETEXT";
/* and... */
str = "%.200s%.5f%d%ul%.*s%%";
/* but not... */
str = "%.5f%.200s%d%ul%%%.*s";
所以我的问题是:
有没有办法验证 2 个字符串具有等效的字符串格式?
也许答案是一些非常好的正则表达式,或者现有的工具或者来自另一个项目的一些示例代码。我无法想象我们是第一个遇到这个问题的项目。
最佳答案
有趣的问题。
我会尝试实现一个函数,从格式化字符串中删除非格式化字符,从而只留下格式说明符。希望这应该足够规范以进行比较。
也许您需要进一步删除诸如字段宽度和(如果支持的话)参数索引之类的内容,因为这些内容对于不同的翻译会有所不同。
想出剥离函数应该不难,格式说明符非常简单。删除字符,直到找到 %
,然后检查以下字符,如果是 %
,则删除两个字符,否则复制字符,直到找到“最终”说明符之一(d
、f
、s
、u
等)。
关于C 字符串格式化等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420841/