题解 | #比较版本号#
比较版本号
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; }