比较版本号字符串
Compare version number strings
"以下是我正在尝试的问题的链接。
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::istringstream
和std::getline
,std::stoll
可以帮助你。
如果版本号可以是任意长度,您仍然可以将其视为点分隔输入,并使用std::istringstream
和std::getline
将数字提取为字符串。但是,与其将它们转换为可以比较的整数,不如逐个字符检查。
从字符串中去除第一个前导零(例如"01"
变成"1"
(。然后比较字符串的长度。较长的字符串将始终更大。
一旦你通过了那个阶段,得到最低有效数字(字符串中的最后一个字符(并进行一个简单的字符比较(C++规范的措辞说字符'1'
将始终小于字符'2'
(。只要字符相等,您就可以向后迭代字符串,逐个字符比较。
相关文章:
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- 如何从二进制文件中获取应用程序的版本号?
- 从 qmake 运行脚本以获取内部版本号
- 比较版本号字符串
- 使用以 10.0.0 形式定义版本号的宏
- 使用 c++ API 更改 qpid 协议版本号
- Visual Studio 2017,Boost和Cmake的版本号
- 如何在C 中输出两个字符串版本,一个具有逃生字符,另一个则不是
- 如何将版本号从git标签传输到CPACK生成的源软件包
- 使用 C、C++ 或 Java 以编程方式获取 Java 和 Flash 的版本号
- 将内部版本号传递给 msbuild(c++ 项目)
- 如何检查特征C 模板库的版本号
- p = new String [0]和p = new Int [0]之后,为什么当删除[] p时字符串版本崩溃
- 如何解决LDCONFIG创建带有版本号的链接
- 使用Jenkins、内部版本号和svn修订版管理程序版本
- 在Visual Studio 2005中自动更新版本号(C++/C#)
- 使用 #define 和 clang 为 info.plist 创建版本号变体
- 以具有多个点(版本号)的格式将数字强制转换(转换)为字符串
- Visual Studio 详细版本号
- COM 对象版本号以及如何通过 Win 注册表处理它