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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值