版本号比较
Introduce
请用熟悉的变成语言,编程实现一个比较任意两个软件版本号大小的函数,如1.2.3a和1.2.4b比较,后者版本号更大,请考虑各种情况,不可以使用系统提供的比较函数
Tool
- javascript
- chrome
Idea
明确版本号的几个表现
1. 长度不确定。
2. 是否含有字母不确定
明确大小之间的区别
1. 1.2.3 < 1.2.4
2. 1.2.3 < 1.2.3.a
3. 1.2.3 < 1.2.3a
4. 1.2.3.a < 1.2.3.b
5. 1.2.3a < 1.2.3b
6. 1.2.3 < 1.2.3.1
7. 1.2.3 < 1.2.4.1
8. 1.2.3a = 1.2.3.a
定义几个类型。 a是测试版,b是正式版,c是附加版,按照字典顺序增加
不存在1.2.3a和1.2.3a这种情况,每家公司的版本号都是同一个规范,所以我按照一样大来比较他们
Thought
- 查看给定的字符串,如果只有一个字母,且在最后,就将字母换成 . + ascii,否则出错
- 比较函数只允许传入两个参数,多余或少于全部扔出一个错误
- 将传入的参数按照 。 作为分割拆成数组,从头到尾进行比较。 如果大于,小于直接出结果,否则一直继续,直到某一个先结束,则另一个大,否则相等
Code
// 判断字符串是否以指定字符串结尾
function endWith(string, str) {
if (arguments.length != 2) {
throw "传入的参数数量不对。"
}
return string.slice(-str.length) == str;
}
// 如果有字母,那就把所有的字母转为.ascii
function formatString () {
if (arguments.length != 1) {
throw "无字符串,无法格式化";
}
var reg = /([a-zA-Z])/g;
var regarray = arguments[0].match(reg);
if (regarray == null) {
return arguments[0].split('.');
}
if (regarray && regarray.length != 1) {
throw "格式错误,只允许出现一个字母";
}
var regString = regarray.join('');
if (endWith(arguments[0], regString) != true) {
throw "传入的版本号有错";
}
return arguments[0].replace(regString, "." + regString.charCodeAt()).split('.');
}
function myCompare() {
if(arguments.length > 2) {
throw "目前只允许比较两个版本号";
} else if (arguments.length < 2){
throw "比较版本必须传入参数";
} else {
if (arguments[0] == arguments[1]) {
return 0;
}
var arr1 = formatString(arguments[0]);
var arr2 = formatString(arguments[1]);
var length = Math.min(arr1.length, arr2.length);
for (var i = 0 ; i != length; i ++) {
if (arr1[i] > arr2[i]) {
return 1;
} else if (arr1[i] < arr2[i]) {
return -1;
} else {
};
}
if (length == arr1.length) {
return -1;
} else {
return 1;
}
}
}
console.log(myCompare("2.3.1", "2.3.1"));
// 长度一样,无字母,且相等
console.log(myCompare("2.5.1.a", "2.5.1.a"));
console.log(myCompare("2.5.1a", "2.5.1a"));
// 长度一样,有字母,且相等
console.log(myCompare("2.5.1a", "2.5.1b"));
// 长度一样,有字母,字母不等
console.log(myCompare("2.5.1", "2.4.1.6"));
// 长度后者大,无字母,前者大
console.log(myCompare("2.3.1", "2.4.1.6"));
// 长度后者大,无字母,后者大
console.log(myCompare("2.5.1a", "2.4.1.6"));
// 长度后者大,有字母,前者大
console.log(myCompare("2.3.1.a", "2.4.1.6"));
// 长度后者大,有字母,后者大
pic
writer&contact
{
"name":"Jontyy" ,
"email": " jontyy@163.com"
}