会按字符从左到右一个位一个位的比较:
如:
ABXEBHZWDB0030514501
ACUDDEFWUC0030514503
因为第1位一样,会比较第2位
B比C小,所以在升序中先排ABXEBHZWDB0030514501
已经决定排序,后面的字符就不会再考虑了
如:
ABXEBHZWDB0030514501
AB3DDEFWUC0030514503
因为第1,2位一样,会比较第3位
数字比字母先排,所以在升序中先排AB3DDEFWUC0030514503
如:
ABXEBHZWDB00305145012
ABXEBHZWDB0030514501
ABXEBHZWDB0030514501X
因为第1-20位一样,会比较第21位
空格(不管实际输没输空格)比数字和字母都先排,所以在升序中就是:
ABXEBHZWDB0030514501
ABXEBHZWDB00305145012
ABXEBHZWDB0030514501X
如果要不管前面的字符,从某个数位开始排,可以用MID函数加一列排序。
=mid(单元格引用,开始字符位数,1000)
如:
=mid(A1,11,1000)
图1. 现在运行的是字符排序,如果是数字排序,就将下面的数字比较块替换“如果”后面的“比较文本”块。
图2. 在输入框中可以输入字符,也可以输入文字,我没有尝试数字与字符混合输入的情况。抱歉有一点小失误,程序后来改为用逗号(,)分隔,但标签的提示忘记修改了。
图3. 输入字符的测试结果
祝编程愉快!
1、假定原数据在A列,选定A列,点"数据"-"分列",选"固定宽度"将你的数据分成两列,字母一列,数字一列。
2、将全表按A、B两列排序(主关键字为A列,次关键字为B列,均为升序)。
3、在后面空白列的第一行输入公式:
=A1B1
将公式向下复制到相应行。
4、选定公式列,点"复制",在A1点右键,点"选择性粘贴",选中"数值",点"确定"。
5、删除B列和添加的公式列。
/*
排序前 : 90dhnsuayA34810
降排序后 : yusnhdaA9843100
二次排序后 : yusnhdaA0013489
Press any key to continue
*/
#include stdio.h
#include stdlib.h
void SortD(char s[]) { // 从大到小排序
int i,j;
char ch;
for(i = 0; s[i + 1]; ++i) {
for(j = i + 1; s[j]; ++j) {
if(s[i] s[j]) {
ch = s[i];
s[i] = s[j];
s[j] = ch;
}
}
}
}
void SortI(char s[]) { // 从小到大排序
int i,j;
char ch;
for(i = 0; s[i + 1]; ++i) {
for(j = i + 1; s[j]; ++j) {
if(s[i] s[j]) {
ch = s[i];
s[i] = s[j];
s[j] = ch;
}
}
}
}
int main(){
char s[] = "90dhnsuayA34810";
int i,pos = -1;
printf("排序前 : %s\n",s);
SortD(s);
printf("降排序后 : %s\n",s);
for(i = 0; s[i]; ++i) {
if(s[i] = '0' s[i] = '9') {
pos = i;
break;
}
}
if(pos != -1) {
SortI(s[pos]);
printf("二次排序后 : %s\n",s);
}
return 0;}
在 Excel 中的数据有很多时候都是有带字母的数字,而且需要对其进行排序,具体该如何对带字母的数字进行排序呢?下面是我带来的关于excel2010排序时对带字母的数字排序 方法 ,希望阅读过后对你有所启发!
excel2010排序时对带字母的数字排序方法:
带字母的数字排序步骤1:如下图所示,即需要进行排序的表格:
带字母的数字排序步骤2:选择所有的产品名称,然后点击 数据,分列:
带字母的数字排序步骤3:选择 固定宽度,下一步:
带字母的数字排序步骤4:点击标尺上的刻度,使竖线隔开子母和数字,然后点击 下一步:
带字母的数字排序步骤5:点击 目标区域,然后选择一个空白的单元格,点击 完成:
带字母的数字排序步骤6:光标定位到数据中的任意单元格,然后点击 数据,排序:
带字母的数字排序步骤7:如下图所示设置排序条件,勾选 数据包含标题 后,点击 确定:
String类实现了Comparable接口,其compareTo方法中定义的是按该字符串的“字典顺序”比较大小,在这个字典中,采用通用的顺序,直接比各个单个的字符的大小,即数字比字母小。
而Collections.sort()方法正是基于Comparable接口的compareTo方法比较大小的。
所以你会得到这个结果。
如果要重定义顺序,在一般情况下,要重写compareTo方法,但是String类是final的,不能被继承修改,所以,你只好重新定义一个表示字符串的类了,很是麻烦。
这么做意味着你要自己实现各种需要用到的字符串方法。。。
重写compareTo之后,就可以使用各种排序器了。
这个方法该怎么写,自己抄String的compareTo的源代码吧,然后改一改。
主要就是加几条判断语句,让数字比字母大。
还有一种方案,自己重写一个排序器,在排序器中再定义两个String比较大小的方法。
排序的时候,使用自己的比较大小方法来比。比较方法还是如上所述,抄String的源码,然后修改字母比较大小的定义的路子。。
两种方案,自己根据需要选吧。
如果对String的其他操作不多,建议采用第一种。这样子自己不用写排序器。
看起来很简单的一个问题,实现起来比较麻烦的。