“待字闺中”面试题之----最新版本

这是一篇关于如何使用C++编程解决比较软件版本号问题的文章。文章指出原始代码的错误,并提供了修正后的代码,以正确处理版本号包含多位数字、非法输入和点分隔符的情况。
摘要由CSDN通过智能技术生成

题目:

给定软件的版本号的表达方式,以及一些版本号,请找出最新的版本。例如:

1. 1.2, 2,2 最新的是2.2

2. 3.1, 3.1.3 最新的是3.1.3

上面的版本号,都是用字符串表示的。


解答:

基于两两比较的方法。

写一个函数,bool compareVesion(char* string1, char* string2).


错误之处在于:

1. 没有考虑输入字符有错误的情况

2. 没有考虑版本号有多个字符构成数字的情况,如12.34.4

3. 把&写成了and

直接写:

#include "iostream"

using namespace std;


int compareVersion(char* version1, char* version2)

{

if(strcmp(version1, version2)==0)

return 0;


int length1 = strlen(version1);

int length2 = strlen(version2);

int tmp = 0;

while(tmp<length1 and tmp<length2)

{

if(version1[tmp]>version2[tmp])

return 1;

else if(version1[tmp]<version2[tmp])

return -1;

else

continue;

}

if(tmp==length1)

return -1;

else

return 1;

}

void main()

{

char* ver1 = new char[256];

char* ver2 = new char[256];

cin>>ver1;

cout<<"version1= "<<ver1<<endl;

cin>>ver2;

cout<<"version2= "<<ver2<<endl;

int result = compareVersion(ver1, ver2);

if(result == 0)

cout<<"the same"<<endl;

else if(result == 1)

cout<<"ver1>ver2"<<endl;

else

cout<<"ver1<ver2"<<endl;

}


修改后:

#include "iostream"
using namespace std;


int compareVersion(char* version1, char* version2)
{
if(strcmp(version1, version2)==0)
return 0;

int length1 = strlen(version1);
int length2 = strlen(version2);
int tmp1 = 0, tmp2 = 0;
int index1 = 0, index2 = 0;
while(index1<length1 && index2<length2)
{
tmp1 = 0;
tmp2 = 0;
while(index1 < length1 && version1[index1] >='0' && version1[index1]<='9')
{
tmp1 *= 10;
tmp1 += version1[index1]-'0';
index1++;
}
if (index1 != length1 && version1[index1]!='.')
{
return -2;
}
else
{
index1++;
}


while(index2 < length2 && version2[index2] >= '0' && version2[index2] <='9')
{
tmp2 *= 10;
tmp2 += version2[index2]-'0';
index2++;
}
if(index2 != length1 && version2[index2]!='.')
{
return -3;
}
else
{
index2++;
}


if(tmp1>tmp2)
return 1;
else if(tmp1<tmp2)
return -1;
else
continue;
}
if(index1==length1)
return -1;
else
return 1;
}
void main()
{
char* ver1 = new char[256];
char* ver2 = new char[256];
cin>>ver1;
cout<<"version1= "<<ver1<<endl;
cin>>ver2;
cout<<"version2= "<<ver2<<endl;
int result = compareVersion(ver1, ver2);
if(result == 0)
cout<<"the same"<<endl;
else if(result == 1)
cout<<"ver1>ver2"<<endl;
else if(result == -2)
cout<<"ver1 is wrong!"<<endl;
else if(result == -3)
cout<<"ver2 is wrong!"<<endl;
else
cout<<"ver1<ver2"<<endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值