博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Compare Version Numbers
阅读量:5796 次
发布时间:2019-06-18

本文共 1645 字,大约阅读时间需要 5 分钟。

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

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

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

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

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

vector
splitStringByDot(string& str){ vector
splitedData; function
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
& segment1, vector
& 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);}

 

转载于:https://www.cnblogs.com/wuOverflow/p/4688812.html

你可能感兴趣的文章
C#中的Marshal
查看>>
网站发的文章有收录 但是没有排名怎么处理
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
[nodejs] nodejs开发个人博客(五)分配数据
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
30分钟Git命令“从入门到放弃”
查看>>
nginx : TCP代理和负载均衡的stream模块
查看>>
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
行为型模式:观察者模式
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
Android开发教程 - 使用Data Binding(一) 介绍
查看>>