【发布时间】:2014-12-23 14:39:03
【问题描述】:
我需要比较两个“版本”字符串,它们可能以.0 结尾,也可能不以.0 结尾,以便(例如)10.3.8.9.2 和10.3.8.9.2.0 被认为是相等的。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20];
char str2[20];
int ret;
strcpy(str1, "10.3.8.9.2");
strcpy(str2, "10.3.8.9.2.0");
// strcpy(str2, "10.3.8.9.20.0"); This case are invalid case and need to handle properly inside ternary operator
ret=(strlen(str1)> strlen(str2))? strncmp( str1,str2,strlen(str2)):(strncmp( str1,str2,strlen(str1))&&( strlen(str2)==strlen(str1)+2 ));
//printf("ret=%d", ret);
//ret=(strlen(str1)> strlen(str2))? strncmp( str1,str2,strlen(str2)):(strncmp( str1,str2,strlen(str1)));
printf("ret_value=%d", ret);
return 0;
}
上面的代码将10.3.8.9.2 和10.3.8.9.20.0 视为相等,这是不正确的。我尝试更新代码,如下所示,但由于strncmp() 在成功时返回0,它没有给出预期的结果。
似乎我没有在三元运算符中正确处理这种情况。可能将两个表达式的返回值存储在单独的变量中可以解决这个问题,但想知道如何使用三元运算符来实现。
【问题讨论】:
-
注意:你可能想要
versionsort()[对BSD和linux标准库的扩展] -
是的,你是对的,我想通过忽略 .0 来验证同样的结果
-
versionsort() 没有给出期望的结果。
-
剪掉所有尾随的
".0"s 并进行比较。
标签: c ternary-operator