其他分享
首页 > 其他分享> > 165. 比较版本号

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 字符串指针造成的。

NjustMEMS_ZJ 发布了25 篇原创文章 · 获赞 13 · 访问量 8177 私信 关注

标签:ver2,strtok,版本号,char,int,165,ver1token,比较,ver2token
来源: https://blog.csdn.net/u013098336/article/details/104447473