目录
1.版本号映射成整数
emmm,我们把.和.之间的号提取出来作比较就好了,num1和num2做比较,都初始化为0以解决长度不一样的问题。
代码如下所示:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
int compare(string version1, string version2) {
// write code here
int len1=version1.size();
int len2=version2.size();
int i=0,j=0;
//只要有一个还没遍历完就继续
while(i<len1 || j<len2){
long long num1=0;
while(i<len1 && version1[i]!='.'){
num1+=num1*10+(version1[i]-'0');
i++;
}
i++;
long long num2=0;
while(j<len2 && version2[j]!='.'){
num2+=num2*10+(version2[j]-'0');
j++;
}
j++;
if(num1>num2){
return 1;
}
if(num1<num2){
return -1;
}
}
return 0;
}
};
2.分割
这里的思路其实和上面一样,但是用了流输入istringstream。
代码如下所示:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
int compare(string version1, string version2) {
// write code here
vector<string> nums1;
vector<string> nums2;
istringstream sin1(version1);
istringstream sin2(version2);
string tmp;
//用流分割
while(getline(sin1,tmp,'.')){
nums1.push_back(tmp);
}
while(getline(sin2,tmp,'.')){
nums2.push_back(tmp);
}
for(int i=0;i<nums1.size()||i<nums2.size();++i){
string s1 = i<nums1.size() ? nums1[i] : "0";
string s2 = i<nums2.size() ? nums2[i] : "0";
//字符串转数字
long long num1=0;
for(int j=0;j<s1.size();++j){
num1=num1*10+(s1[j]-'0');
}
long long num2=0;
for(int j=0;j<s2.size();++j){
num2=num2*10+(s2[j]-'0');
}
if(num1>num2){
return 1;
}
if(num1<num2){
return -1;
}
}
return 0;
}
};