比较版本号字符串

Compare version number strings

本文关键字:字符串 版本号 比较      更新时间:2023-10-16

"以下是我正在尝试的问题的链接。

https://www.interviewbit.com/problems/compare-version-numbers/

我模拟了数组以比较两个版本。但我在代码中找不到任何错误。

int compareVersion(string A, string B) {

vnum1, vnum2 存储版本 A 和 B 的每个数字部分

long long int vnum1 = 0, vnum2 = 0; 

循环,直到两个字符串都被处理

//  storing numeric part of version A in vnum1 
int i=0,j=0;
while(i<A.length()||j<B.length()){

while (i < A.length()&&A[i]!='.') 
{    
vnum1 = vnum1 * 10 + (A[i]-'0'); 
i++; 
} 
//  storing numeric part of version B in vnum2 
while (j < B.length()&&B[j]!='.') 
{ 
vnum2 = vnum2 * 10 + (B[j] - '0'); 
j++; 
} 
if (vnum1 > vnum2) 
return 1; 
else  if (vnum2 > vnum1) 
return -1; 
//  if equal, reset variables and go for next numeric 
vnum1=0;
vnum2=0;
i++;
j++;
}  return 0; 
}

输入

A="444444444444444444444444"
B="4444444444444444444444444"

实际

1

预期

-1

将版本号视为以点分隔的字符串。从每个输入字符串中获取第一个并进行比较。如果它们不相等,您可以立即返回结果,否则您将获得下一个以点分隔的数字,依此类推,直到到达字符串的末尾。

std::istringstreamstd::getlinestd::stoll可以帮助你。


如果版本号可以是任意长度,您仍然可以将其视为点分隔输入,并使用std::istringstreamstd::getline将数字提取为字符串。但是,与其将它们转换为可以比较的整数,不如逐个字符检查。

从字符串中去除第一个前导零(例如"01"变成"1"(。然后比较字符串的长度。较长的字符串将始终更大。

一旦你通过了那个阶段,得到最低有效数字(字符串中的最后一个字符(并进行一个简单的字符比较(C++规范的措辞说字符'1'将始终小于字符'2'(。只要字符相等,您就可以向后迭代字符串,逐个字符比较。