编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
// 思路,一个数组存储字母(排序后的)
// 一个对象存储非字母的键值(索引+值)
while(true){
// 判断结束条件
if(arr=readline()){
arr=arr.split('')
}else{
break;
}
//var arr=readline().split('')
var eng=[]; // 存储字母
var other={}; // 存储非字母
for(var i=0;i<arr.length;i++){
if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){
eng.push(arr[i])
}else{
other[i]=arr[i]
}
}
//console.log(eng)
// 比较大写形式,也即是不区分大小写
for(var m=0;m<eng.length;m++){
for(var n=0;n<eng.length-m-1;n++){
if(eng[n].toUpperCase()>eng[n+1].toUpperCase()){
var tem=eng[n];
eng[n]=eng[n+1];
eng[n+1]=tem;
}
}
}
//有一点需要注意,在本地使用IDE,对eng使用sort()参数为一个自定义函数
// 可以实现排序,但是在EDG浏览器和牛客上,会出现排序错误,不是想要的结果
var str=""
for(var i=0;i<arr.length;i++){
// 该索引被非字母占据了
if(other[i]){
str+=other[i]
}else{
str+=eng[0];
// 已经用过的就删除
eng.shift()
}
}
console.log(str)
}
前端基础笔记——英文字符串排序(包含非字母)
最新推荐文章于 2024-08-30 15:28:52 发布