一种版本号比较函数的c++实现

来源:互联网 发布:淘宝京东唯品会哪个好 编辑:程序博客网 时间:2024/05/10 06:21
//暂且假设版本号用数字和'.'表示,字母版本号暂不考虑
#include<iostream>
#include<string>
using namespace std;


//比较:0为相等,1为a版本号大,2为b版本号大,3为异常情况
int versionCompare(string a, string b) {
//检测输入格式,保证“数字”+“.”+“数字”的格式
for (int i = 0; i < a.size(); i++) {
if ((a[i] > '9' || a[i] < '0') && a[i] != '.')

return 3;

if(i>0&&a[i]==a[i-1]&&a[i]=='.')

return 3;

}
for (int i = 0; i < b.size(); i++) {
if ((b[i] > '9' || b[i] < '0') && b[i] != '.')
return 3;

if(i>0&&b[i]==b[i-1]&&b[i]=='.')

return 3;

}
if (a[0]=='.'||b[0]=='.'||a[a.size() - 1] == '.' || b[b.size() - 1] == '.')
return 3;
//相等
if (a == b)
return 0;
int comp1 = 0, comp2 = 0;
string temp1 = a, temp2 = b;
//通过循环按层次拆分版本号
while (temp1.size() != 0 && temp2.size() != 0) {
//取得a版本号数字
for (int i = 0; i < temp1.size(); i++) {
if (temp1[i] == '.' || i == temp1.size() - 1) {
comp1 = atoi(temp1.c_str());
temp1 = temp1.substr(i+1);
break;
}
}
//取得b版本号数字
for (int i = 0; i < temp2.size(); i++) {
if (temp2[i] == '.' || i == temp2.size() - 1) {
comp2 = atoi(temp2.c_str());
temp2 = temp2.substr(i+1);
break;
}
}
//比较
if (comp1 > comp2)
return 1;
else if (comp1 < comp2)
return -1;
comp1 = 0; 
comp2 = 0;
}
//处理型如1和1.1的情况
if (temp1.size() == 0)
return -1;
else
return 1;
}
0 0
原创粉丝点击