165. 比较版本号
作者:互联网
思路
根据字符".“将输入的字符串分割开,然后动态进行比较,一旦不相等则返回
分割的函数可以自己写,也可以利用库函数strtok
如果利用库函数,需要一次性分割完成,因此需要预先定义一个数组,将分割好的数存起来,最后进行比较
如果自己写分割的函数,可以利用两个指针记录”."之间的字符串,之后进行比较。
代码
#include <string.h>
#include <stdlib.h>
int compareVersion(char * version1, char * version2){
int ver1[1000] = {0};
int ver2[1000] = {0};
char *ver1token;
char *ver2token;
int i = 0;
ver1token = strtok(version1,".");
while (ver1token != NULL) {
ver1[i] = atoi(ver1token);
ver1token = strtok(NULL,".");
i++;
}
int j = 0;
ver2token = strtok(version2,".");
while (ver2token != NULL) {
ver2[j] = atoi(ver2token);
ver2token = strtok(NULL,".");
j++;
}
int n = i>j?i:j;
for(int p = 0; p <= n; p++) {
if(ver1[p] > ver2[p]) {
return 1;
} else if (ver1[p] < ver2[p]) {
return -1;
}
}
return 0;
}
注意
需要注意strtok的使用,其在调用的过程会对入参进行修改,因此第一个参数不能是字符串常量,否则会报segmentation fault,详细可以参考
http://blog.chinaunix.net/uid-30086959-id-5211786.html
另外,在程序调试时,如果遇到segmentation fault,又恰好涉及字符串指针的时候,可以思考是否是程序尝试操作const 字符串指针造成的。
标签:ver2,strtok,版本号,char,int,165,ver1token,比较,ver2token 来源: https://blog.csdn.net/u013098336/article/details/104447473