[字符串]比较版本号

142 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题

image.png

思路

利用 getline() 对版本号进行分割,得到修订号,针对有前导 0 的修订号,利用 stringstream 转换成 int 类型。

代码实现

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 
     * @param version2 string字符串 
     * @return int整型
     */
    int compare(string version1, string version2) {
        // write code here
        stringstream ss1, ss2, sstmp;
        string tmp;
        int v1, v2;
        ss1 << version1;
        ss2 << version2;
        // 有一个字符串先到末尾,还有读取另一个字符串
        while (!ss1.eof() || !ss2.eof())
        {
            if (ss1.eof()) v1 = 0;
            else
            {
                // 以 '.' 为分割符号,每次进入循环读取以 '.'分割的字符串
                getline(ss1, tmp, '.');
                // 将读取的字符串转换成 int
                sstmp << tmp;
                sstmp >> v1;
                sstmp.clear();
            }
            
            if (ss2.eof()) v2 = 0;
            else
            {
                getline(ss2, tmp, '.');
                sstmp << tmp;
                sstmp >> v2;
                sstmp.clear();
            }
            if (v1 > v2) return 1;
            if (v1 < v2) return -1;
        }
        return 0;
    }
};