题解 | #比较版本号#
比较版本号
http://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
//因为需要比较的修改号可能会很长,因此没有选用转化为数字来比较的方法,而是逐个字符进行比较
int compare(char* version1, char* version2 ) {
// write code here
int prelen1 = 0, prelen2 = 0, suclen1 = 0, suclen2 = 0;//每一个需要比较的修改号在字符串中的开始位置和结束位置
int i ,j;
while(1)//(*(version1 + suclen1) != '\0' && *(version2 + suclen2) != '\0')
{
//如果遇到了一个修改号结束的位置‘\0’‘.’,则开始比较当前的两个修改号
if((*(version1 + suclen1) == '.' || *(version1 + suclen1) == '\0' )&& (*(version2 + suclen2) == '.' || *(version2 + suclen2) == '\0') )
{
if(suclen1 -prelen1 > suclen2 - prelen2)
{
return 1;
}
else if(suclen1 -prelen1 < suclen2 - prelen2)
{
return -1;
}
else
{
i = suclen1 - 1;
j = suclen2 - 1;
while(i >= prelen1 && j >= prelen2)
{
if(*(version1 + i) > *(version2 + j))
{
return 1;
}
else if(*(version1 + i) < *(version2 + j))
{
return -1;
}
else
{
i --;
j --;
}
}
if( *(version1 + suclen1) == '\0' || *(version2 + suclen2) == '\0')
{
break;
}
suclen1 ++;
suclen2 ++;
prelen1 = suclen1;
prelen2 = suclen2;
}
}
//不用比较继续向前走
if((*(version1 + suclen1) != '.') && (*(version1 + suclen1) != '\0'))
{
//处理前面的0
if((*(version1 + suclen1) == '0') && (prelen1 == suclen1))
{
prelen1 ++;
}
suclen1 ++;
}
//不用比较继续向前走
if((*(version2 + suclen2) != '.') && (*(version2 + suclen2) != '\0'))
{
//处理前面的0
if((*(version2 + suclen2) == '0') && (prelen2 == suclen2))
{
prelen2 ++;
}
suclen2 ++;
}
}
if( *(version1 + suclen1) == '\0')
{
while(*(version2 + suclen2) != '\0')
{
if((*(version2 + suclen2) > '0') && (*(version2 + suclen2) <= '9') )
{
return -1;
}
suclen2 ++;
}
}
if( *(version2 + suclen2) == '\0')
{
while(*(version1 + suclen1) != '\0')
{
if(((*(version1 + suclen1) > '0') && (*(version1 + suclen1 )<= '9') ))
{
return 1;
}
suclen1 ++;
}
}
return 0;
}
智元机器人成长空间 174人发布
查看29道真题和解析