请实现一个函数:最新版本号;输入两个表示版本号的字符串,返回版本较大的一个;版本字符串分为3断:主版本号,次版本号和编译版本号,之间用”.”分隔,前面的号更重要;比如 ”13.21” > ”5.6” > ”3” > ”2.1.151” > ”0.1.0” 等都是合法的表示方法;
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
#define MAX_LEN 128
bool SplitString(const string& src,const string& separator,vector<int>& dest)
{
string str = src;
string substring;
string::size_type start = 0,index;
int iver = 0;
int count = 0;
do
{
index = str.find_first_of(separator,start);
if (index != string::npos)
{
substring = str.substr(start,index-start);
iver = atoi(substring.c_str());
dest.push_back(iver);
iver = 0;
count++;
start = str.find_first_not_of(separator,index);
if (start == string::npos)
return false;
}
}while(index != string::npos);
substring = str.substr(start);
iver = atoi(substring.c_str());
dest.push_back(iver);
iver = 0;
count++;
if(3 < dest.size())
{
cout<<"Invalid format of version["<<src<<"],please input a right version!"<<endl;
return false;
}
for(int i = 3 - count;3 > dest.size() && i > 0;i--)
dest.push_back(0);
return true;
}
void TrimString(string& str)
{
if(str.empty())
return;
str.erase(0,str.find_first_not_of("\t"));
str.erase(str.find_last_not_of("\t") + 1);
str.erase(0,str.find_first_not_of(" "));
str.erase(str.find_last_not_of(" ") + 1);
}
/*
* ¹¤¾ßº¯Êý£¬±È½Ï°æ±¾´óС
*/
int CompareVer(vector<int>& ver1,vector<int>& ver2)
{
for(int i = 0;i < 3;i++)
{
if(ver1[i] == ver2[i])
continue;
else
return (ver1[i] > ver2[i]) ? 0 : 1;
}
}
string test2(const string& strVer1,const string& strVer2)
{
vector<int> ver1,ver2;
if(!SplitString(strVer1,".",ver1))
{
string str1("the first version [");
str1.append(strVer1);
str1.append("] is error!");
return str1;
}
if(!SplitString(strVer2,".",ver2))
{
string str2("the second version [");
str2.append(strVer2);
str2.append("] is error!");
return str2;
}
int bi = CompareVer(ver1,ver2);
if(0 == bi)
return strVer1;
if(1 == bi)
return strVer2;
}
int main()
{
try
{
char buffer1[MAX_LEN],buffer2[MAX_LEN];
loop:
cout<<"Please input the first version : ";
cin.getline(buffer1,MAX_LEN);
string str1(buffer1);
TrimString(str1);
cout<<"Please input the second version : ";
cin.getline(buffer2,MAX_LEN);
string str2(buffer2);
TrimString(str2);
if(str1.empty() && str2.empty())
{
cout<<"Please input the version again!"<<endl;
goto loop;
}
cout<<"[test2]'s result is : "<<test2(str1,str2)<<endl;
}
catch(...)
{
cout<<"[test2] has a error!"<<endl;
}
return 0;
}
请大家多多的提些意见。