• Compare Version Numbers


    这个其实并不难,只是前期有点恶心,因为可能两边都没小数点,又可能只有一边有小数点,还有可能两边都有,真尼玛麻烦死了。

    我的策略很简单,先是根据传入的 string 把它按照小数点用递归的方法分割成若干段,存入容器中,再用迭代的方法比较两个容器就行了。

    那么怎么处理有时可能没有小数点的情况呢?

    我的解决办法就是将其直接存入容器,然后再存入一个 "0" 这样既没有改变其大小,又使其可以与有小数点的可以比较。

    毕竟这一次是我纯粹自己想出来的,以下是代码:

    vector<string> splitStringByDot(string& str)
    {
        vector<string> splitedData;
        
        function<void(string)> split;
        split = [&](string s)
        {
            auto dotIndex = s.find(".");
            
            if (dotIndex == string::npos) {
                splitedData.push_back(s);
                splitedData.push_back("0");
                return;
            }
            
            splitedData.push_back(string(str.cbegin(), str.cbegin() + dotIndex));
            str.erase(str.cbegin(), str.cbegin() + dotIndex + 1);
            split(str);
        };
        split(str);
        return splitedData;
    }
    
    int compareSegments(vector<string>& segment1, vector<string>& segment2)
    {
        auto begin1 = segment1.cbegin();
        auto begin2 = segment2.cbegin();
        
        auto strToInt = [](const string& s){return atoi(s.data());};
        
        while (begin1 != segment1.cend() && begin2 != segment2.cend()) {
            if (strToInt(*begin1) < strToInt(*begin2)) {
                return -1;
            }
            
            if (strToInt(*begin1) > strToInt(*begin2)) {
                return 1;
            }
            
            ++begin1;
            ++begin2;
        }
        return 0;
    }
    
    int compareVersion(string version1, string version2)
    {
        auto versionSegments1 = splitStringByDot(version1);
        auto versionSegments2 = splitStringByDot(version2);
        
        return compareSegments(versionSegments1, versionSegments2);
    }
  • 相关阅读:
    CodeForces 452C Magic Trick (排列组合)
    zoj 3209 Treasure Map(精确覆盖)
    POJ 1459 Power Network(网络流 最大流 多起点,多汇点)
    POJ 1273 Drainage Ditches(网络流 最大流)
    HDU Tickets(简单的dp递推)
    ZOJ 3080 ChiBi(spfa)
    URAL 1036(dp+高精度)
    最佳的 清楚浮动 clearfix
    响应式开发
    javascript 性能优化
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/4688812.html
Copyright © 2020-2023  润新知