字符串数组,单个字符串长度不定,
数字间以-分隔
1-3-1
1
2-3-2
10-2
3-3-3-3-3-3
1-1-1
4-1-2
16
排序后:
1
1-1-1
1-3
2-3-2
3-3-3-3-3-3
4-1-2
10-2
16
求思想
C语言自带函数strcmp(s1,s2)
说明:
当s1 当s1=s2时,返回值=0
当s1>s2时,返回值>0
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
那你自己写个比较函数,把每个数字存放到数组中,然后比较
看了输出后的结果…其实这个只用一步就能做到…在Java中…字符串发现比较规则是…先比较第一个字符…再比较第二字符…
楼主可以把字符串放进一个字符串数组,然后冒泡排序,用大于号小于号比较即可。排好序输出即可
我回来又想想,想了个方法,不想写代码了,就说说思想,我用java,先用正则匹配每个字符串中中划线的个数,然后再把所有的字符串都补齐,补成相同位数,然后把中划线全部替换掉,把去掉中划线后的字符串数组变成long类型的数组,用Arrays.sort升序排列下,输出,就是楼主要的答案。整体思想,就是把第一位变成高位,后面次之,最后变成数字数值排序。,
public static void main(String[] args) {
String[] ss = {
"1-3-1",
"2-3-2",
"10-2",
"3-3-3-3-3-3",
"1-1-1",
"4-1-2",
"16",
"1"
};
int maxlenIndex = 0;
int maxlen = 0;
int len = ss.length;
for(int i=0;i int cur = ss[i].length();
maxlen = maxlen>cur ? maxlen : cur;
if(maxlen==cur){
maxlenIndex = i;
}
}
// System.out.println(maxlenIndex);
int ccl = ss[maxlenIndex].split("-").length;
//System.out.println(ccl);
long[] bb = new long[len];
for(int i = 0; i < len; i++){
String[] aa = ss[i].split("-");
int aal = aa.length;
String b = "";
for(int j=0;j if(j b+=aa[j];
}else{
b+="0";
}
}
bb[i] = Long.parseLong(b);
}
for(int i=0;i for(int j=0;j if(bb[j]>bb[j+1]){
long xy = bb[j];
bb[j] = bb[j+1];
bb[j+1] = xy;
String s = ss[j];
ss[j] = ss[j+1];
ss[j+1] = s;
}
}
}
for(int i=0;i<len;i++){
System.out.println(ss[i]);
}
for(int i=0;i<len;i++){
System.out.println(bb[i]);
}
}
呃,好吧,搞定碎觉。。至于优化什么的,楼主来搞吧。