对list中存放的字符串组排序

对list中存放的字符串组排序
对list中存放的字符串组排序

package com.John.list;

import java.util.ArrayList;

import java.util.List;

/**

* 对list中存放的字符串组,按照字符串数组的最后一个元素必须为数字,按照数字的大小,对每一个字符串数组进行排序

* @author John

*

*/

public class ListSortDemo {

public List sortList(List list) {

System.out.println("list长度:" + list.size());

for (int i = 0; i < list.size() - 1; i++) {

// System.out.println("i的值" + i);

for (int j = i + 1; j < list.size(); j++) {

// System.out.println("j的值" + j);

String[] arr1 = list.get(i);

String[] arr2 = list.get(j);

int arrLength = arr1.length;

if (Integer.parseInt(arr1[arrLength - 1]) < Integer

.parseInt(arr2[arrLength - 1])) {

list.add(i, arr2);

list.add(j, arr1);

list.remove(i + 3);

list.remove(j + 1);

}

}

}

return list;

}

public static void main(String[] args) {

ListSortDemo l = new ListSortDemo();

List list = new ArrayList();

String[] str1 = { "nihao", "1" };

String[] str2 = { "hello", "3" };

String[] str3 = { "world", "2" };

String [] str4 = {"hello", "1"};

list.add(0, str1);

list.add(1, str2);

list.add(2, str3);

list.add(3, str4);

System.out.println("源List :");

for (String[] elem : list) {

for (String elem1 : elem) {

System.out.print(elem1 + ", ");

}

System.out.println();

}

List sortedList = l.sortList(list);

System.out.println("排序后的list");

for (String[] elem : sortedList) {

for (String elem1 : elem) {

System.out.print(elem1 + ", ");

}

System.out.println();

}

}

}

昵称排序用什么字符 (什么字符排在最前)

ASCII 1 = ASCII 2 = ASCII 3 = ASCII 4 = ASCII 5 = ASCII 6 = ASCII 7 = ASCII 8 = ASCII 9 = ASCII 10 = ASCII 11 = ASCII 12 = ASCII 13 = ASCII 14 = ASCII 15 = ASCII 16 = ASCII 17 = ASCII 18 = ASCII 19 = ASCII 20 = ASCII 21 =

ASCII 23 = ASCII 24 = ASCII 25 = ASCII 26 = ASCII 27 = ASCII 28 = ASCII 29 = ASCII 30 = - ASCII 31 = ASCII 32 = ASCII 33 = ! ASCII 34 = " ASCII 35 = # ASCII 36 = $ ASCII 37 = % ASCII 38 = & ASCII 39 = ' ASCII 40 = ( ASCII 41 = ) ASCII 42 = *

ASCII 44 = , ASCII 45 = - ASCII 46 = . ASCII 47 = / ASCII 48 = 0 ASCII 49 = 1 ASCII 50 = 2 ASCII 51 = 3 ASCII 52 = 4 ASCII 53 = 5 ASCII 54 = 6 ASCII 55 = 7 ASCII 56 = 8 ASCII 57 = 9 ASCII 58 = : ASCII 59 = ; ASCII 60 = < ASCII 61 = = ASCII 62 = > ASCII 63 = ?

各种排序算法比较

排序算法 一、插入排序(Insertion Sort) 1. 基本思想: 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。 2. 排序过程: 【示例】: [初始关键字] [49] 38 65 97 76 13 27 49 J=2(38) [38 49] 65 97 76 13 27 49 J=3(65) [38 49 65] 97 76 13 27 49 J=4(97) [38 49 65 97] 76 13 27 49 J=5(76) [38 49 65 76 97] 13 27 49 J=6(13) [13 38 49 65 76 97] 27 49 J=7(27) [13 27 38 49 65 76 97] 49 J=8(49) [13 27 38 49 49 65 76 97] Procedure InsertSort(Var R : FileType); //对R[1..N]按递增序进行插入排序, R[0]是监视哨// Begin for I := 2 To N Do //依次插入R[2],...,R[n]// begin R[0] := R[I]; J := I - 1; While R[0] < R[J] Do //查找R[I]的插入位置// begin R[J+1] := R[J]; //将大于R[I]的元素后移// J := J - 1 end R[J + 1] := R[0] ; //插入R[I] // end End; //InsertSort // 二、选择排序 1. 基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 2. 排序过程: 【示例】: 初始关键字[49 38 65 97 76 13 27 49] 第一趟排序后13 [38 65 97 76 49 27 49] 第二趟排序后13 27 [65 97 76 49 38 49] 第三趟排序后13 27 38 [97 76 49 65 49] 第四趟排序后13 27 38 49 [49 97 65 76] 第五趟排序后13 27 38 49 49 [97 97 76]

一种改进的中文字符串排序方法

2010,46(19)1引言 字符串排序是自然语言处理中的重要基础技术,排序速度会对相关处理产生很大影响。在新词发现、术语抽取、有意义串检测等领域,排序算法都有广泛应用。在基于大规模语 料的中文高频重复模式提取中,字符串排序已经成为影响重 复模式提取速度的关键技术。 人们对研究排序技术一直很感兴趣,也产生了很多高效 的排序算法[1]。基于比较的排序方法较多,包括:插入排序 (Insertion Sort )、冒泡排序(Bubble Sort )[2]以及快速排序 (Quick Sort )[3]等。插入排序和冒泡排序算法的时间复杂度是O (n 2);快速排序算法是最常用的排序算法,该算法的平均时间 复杂度是O (n lg n ),最坏的情况是O (n 2);桶排序[4-5]方法是一种特殊的排序方法,处理均匀数据效率很高,是O (N )算法,但对 极不均匀数据则退化成复杂度为O (n 2)的插入排序。基数排序 (Radix Sort )[6]算法是一种不基于比较的排序方法,算法的时间复杂度是O (dn )。从理论上看,基数排序算法具有最快的排序速度,但一般应用于整型数值领域,使用范围受到了诸多限制。对中文字符串排序,基本上都是直接使用基于比较的排序方法来实现,很少有针对中文字符串排序的专门研究。何文明等[7]提出了一种针对复杂数据(包括字符串)的分档排序 算法,可以获得比较有针对性的排序效率提升,但针对中文字一种改进的中文字符串排序方法 张海军1,2,3,丁溪源2,朱朝勇2, 3ZHANG Hai-jun 1,2,3,DING Xi-yuan 2,ZHU Chao-yong 2, 31.新疆师范大学计算机科学与技术系,乌鲁木齐830054 2.中国科学院计算机语言信息工程研究中心,北京100097 3.中国科学技术大学计算机科学与技术学院,合肥230027 1.Department of Computer Science and Technology ,Xinjiang Normal University ,Urumqi 830054,China 2.Research Center of Computer &Language Information Engineering ,Chinese Academy of Sciences ,Beijing 100097,China 3.School of Computer Science and Technology ,University of Science and Technology of China ,Hefei 230027,China E-mail :ustczhj@https://www.360docs.net/doc/ea12770152.html, ZHANG Hai-jun ,DING Xi-yuan ,ZHU Chao-yong.Improved sort method for Chinese https://www.360docs.net/doc/ea12770152.html,puter Engineering and Applications ,2010,46(19):129-131. Abstract :At present ,the time complexity of the fastest sort algorithm for Chinese strings is O (n lg n ).Radix sort algorithm ,whose time complexity is O (dn ),is one of the most efficient sort methods ,but it is fit for integer data with identical digits.This paper puts forward a fast transform method used to convert strings to an integer arrays with identical length.The inte-ger arrays representing strings are sorted by radix sort algorithm to achieve rapid sort for Chinese strings.Experiments show that the improved algorithm can quickly sort Chinese strings and its performance is better than that of quick sort algorithm.The relationship between sort time and data size is linear and the time complexity of the algorithm is O (dn ). Key words :Chinese string ;radix sort ;hash table ;time complexity 摘要:对中文字符串排序,最快算法的时间复杂度是O (n lg n )。基数排序算法是目前最快的排序方法之一,时间复杂度是O (dn ),但其一般适用于相同长度的整型数据排序。提出了一种快速的变换方法,将字符串转换为与之等长的整型数组,使用基数排序算法对代表字串的整型数组排序,用以实现对字符串的快速排序。实验表明,提出的算法能快速地进行中文字符串排序,比快速排序算法具有更好的性能,且排序时间与数据规模之间是线性关系,算法的时间复杂度为O (dn )。 关键词:中文字符串;基数排序;散列表;时间复杂度 DOI :10.3778/j.issn.1002-8331.2010.19.037文章编号:1002-8331(2010)19-0129-03文献标识码:A中图分类号:TP391基金项目:国家自然科学基金(the National Natural Science Foundation of China under Grant No.60672149);国家高技术研究发展计划(863) (the National High-Tech Research and Development Plan of China under Grant No.2006AA010109)。 作者简介:张海军(1973-),男,博士研究生,CCF 学生会员,研究方向为自然语言处理,新词汇识别技术;丁溪源(1985-),男,硕士研究生,研究方 向为新词识别技术;朱朝勇(1985-),男,博士研究生,研究方向为自然语言处理,知识库构建技术。 收稿日期:2009-12-28修回日期:2010-03-22?数据库、信号与信息处理? Computer Engineering and Applications 计算机工程与应用129

53.String sort 字符串排序的几种方法

String sort的几种方法 简介 在之前的一些排序算法中,主要是对一些数值的类型比较的比较多一点。而对于字符串类型来说,它有一些特殊的性质。如果按照传统的排序方法,对于字符串的比较性能其实还取决于字符串的长度以及相似程度。实际上,对于一些字符集的取值在一个比较小的范围内的情况,我们可以有一些比较高效率的算法。这里针对这些特殊的情况进行讨论。 假设给定的排序集合里元素,也就是每个字符都是在一个比较有限的范围里,比如说256个字符范围内。那么,我们可以利用这个特性做一些高效的处理。联想到之前讨论过的counting sort和radix sort方法。这里就是利用了这个特性。 Key-Indexed counting 在之前讨论couting sort的文章里,曾经针对需要排序的元素为数字的情况进行过讨论。counting sort成立的一个前提是它里面所有的元素取值是在一个固定的范围内。假设这个数组里元素能取的最大值是k,那么每次我们要排序的时候只需要声明一个长度为k的数组a。每次碰到一个元素i就将a[i]对应的值加1。这样就统计出来了所有从小到大的元素的值的分布。剩下的就只是从小到达把这些值重新排列输出就可以了。 当然,在一些数字有一定长度而且它们的长度都一样的情况下。我们可以利用从高到低或者从低到高位逐位排序的方式来对数组进行排序。这就是radix sort的基本思路。它本质上就是在每一位的排序上都使用了couting sort。 借鉴前面对于数字的排序,我们对于字符串数组的排序也可以采用类似的方式: Java代码 1.int[] count = new int[R + 1]; 2.//计算每个字符出现的频率 3.for(int i = 0; i < n; i++) 4. count[a[i].charAt(d) + 1]++; 5.//将每个字符出现的频率转换为所在的索引 6.for(int r = 0; r < R; r++) 7. count[r + 1] += count[r]; 8.//将字符分布到具体的数组位置 9.for(int i = 0; i < n; i++) 10. aux[count[a[i].charAt(d)]++] = a[i]; 11.//将结果拷贝回数组 12.for(int i = 0; i < n; i++) 13. a[i] = aux[i]; 上述代码里的R表示当前字符的取值范围。在R值不大的时候它的效率还是相当可观的。在这个计数排序的基础上,我们可以得到一些不同的排序算法。 LSD sort 一种最典型的方法就是从最低位向最高位的方式依次排序,这种和前面的radix sort的思路基本上完全一样。不过在前面的基础上针对字符的情况稍微做一点修改。详细的代码实现如下: Java代码 1.public class LSD {

计算机等级考试 南开百题—字符串左右排序和比较类试题

计算机等级考试南开百题—字符串左右排序和比较类试题南开百题—字符串左右排序和比较 2题函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx 中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx 中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 d c b a h g f e 4 3 2 1 9 8 7 6 5 则处理后字符串 h g f e a b c d 8 7 6 5 9 1 2 3 4 部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 #include #include #include char xx[20][80]; void jsSort() { }

void main() { readDat(); jsSort(); writeDat(); } readDat() { FILE *in; int i=0; char *p; in=fopen("in.dat","r"); while(i<20&&fgets(xx[i],80,in)!=NULL){ p=strchr(xx[i],'\n'); if(p)*p=0; i++; } fclose(in); } writeDat() { FILE *out(); int i; clrscr(); out=fopen("out.dat","w"); for(i=0;i<20;i++){

汇编语言比较两个字符串的大小

实验二比较两个字符串的大小 一、实验要求 从键盘上输入两个字符串,比较两个字符串的大小。如果第一个字符串比第二个字符串大,则显示1;如果两个字符串相等,则显示0;如果第一个字符串比第二个字符串小,则显示-1 (1)画出实现上述功能的汇编语言程序流程图 (2)写出实现上述功能的汇编语言程序 (3)编译,连接编写的汇编语言程序,并运行生成的可执行文件,描述其执行情况 (4)对上述程序进行调试 (5)描述反编译后的程序在执行前的数据段的内容何在调试过程中各寄存器的变化。 (6)写出实现上述要求的实验报告 二、实验环境 该试验包括的硬件和软件条件如下: 1、硬件环境 (1)联想AMD双核台式电脑 (2)内存1G 2、软件环境 Windows XP 三、实验步骤 1.程序流程图

2.程序代码 data segment msg1 DB "Please input a string:",'$' string1 DB 100,0,100 dup(?) msg2 DB "Please input another string:",'$' string2 DB 100,0,100 dup(?) msg3 db 0ah,0dh result DW ?,'$' Data ends Stack segment para stack db 20h dup(0) Stack ends code segment Assume Cs:code,Ss:stack,ds:Data Start: mov ax,data mov ds,ax mov es,ax lea dx,msg1 mov ah,09h int 21h lea dx,string1 mov ah,0ah int 21h

c语言 数组排序 字符串排序 函数实现

1.数组倒叙 #include void show(int *a,int len) { int i; for(i=0;i

2.字符串排序 #include #include int main() { char *a[]={"aaaaaaa","ddddddd","eeeee","cccccc"}; int i; int len=sizeof a/sizeof *a; for(i=0;i0) { a[y]=(char *)((int )a[y]^(int)a[y+1]); a[y+1]=(char *)((int )a[y]^(int)a[y+1]); a[y]=(char *)((int )a[y]^(int)a[y+1]); } for(i=0;i

c语言数组排序字符串排序函数实现

1.数组倒叙#include void show(int *a,int len) { int i; for(i=0;i

} return a; } int main() { int l,i; int a[]={1,2,3,4,5,6,7,8}; l=sizeof a/sizeof *a; show(a,l); int *b=reverse(a,l); show(b,l); } 2.字符串排序 #include #include int main() {

char *a[]={"aaaaaaa","ddddddd","eeeee","cccccc"}; int i; int len=sizeof a/sizeof *a; for(i=0;i0) { a[y]=(char *)((int )a[y]^(int)a[y+1]); a[y+1]=(char *)((int )a[y]^(int)a[y+1]); a[y]=(char *)((int )a[y]^(int)a[y+1]); } for(i=0;i

汇编字符串比较

从键盘分别输入两个字符串(不必等长),然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MA TCH”。 CRLF MACRO MOV AH,2 MOV DL,0DH INT 21H MOV AH,2 MOV DL,0AH INT 21H ENDM S_SHOW MACRO STRING MOV AH,9 MOV DX,OFFSET STRING INT 21H ENDM S_IN MACRO BUFF MOV AH,10 MOV DX,OFFSET BUFF INT 21H ENDM DA TA SEGMENT MESS1 DB 'MATCH',0DH,0AH,'$' MESS2 DB 'NO MATCH',0DH,0AH,'$' MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' STR1 DB 100,?,100 DUP(0) STR2 DB 100,?,100 DUP(0) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX S_SHOW MESS3 S_IN STR1 CRLF S_SHOW MESS4 S_IN STR2 CRLF

MOV CL,STR1+1 MOV SI,OFFSET STR1+2 AGAIN: MOV AL,[SI] MOV CH, STR2+1 MOV DI,OFFSET STR2+2 NEXT: CMP AL,[DI] JE MA TCH INC DI DEC CH JNZ NEXT INC SI DEC CL JNZ AGAIN S_SHOW MESS2 JMP EXIT MATCH: S_SHOW MESS1 EXIT: MOV AH,01H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。要求输入的数字字符串以回车键结束。如果输入的数字超过4个,则以最后输入的4个为准。若按下的键不是十六进制数字字符,则显示出错信息。 C_SHOW MACRO CHAR MOV AH,2 MOV DL,CHAR INT 21H ENDM S_SHOW MACRO STRING MOV AH,9 MOV DX,OFFSET STRING INT 21H ENDM S_IN MACRO BUFF MOV AH,10 MOV DX,OFFSET BUFF INT 21H ENDM

字符串比较问题

字符串比较问题 一、问题描述 对于长度相同的2 个字符串A和B,其距离定义为相应位置字符距离之和。2 个非空格字符的距离是它们的ASCII码之差的绝对值。空格与空格的距离为0;空格与其它字符的距离为一定值k。在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串A 和B 的所有长度相同的扩展中,有一对距离最小的扩展,该距离称为字符串A和B的扩展距离。对于给定的字符串A和B,试设计一个算法,计算其扩展距离。 二、算法设计 解答: 设字符串A和B的字串A[1...i]和B[1...j]的扩展距离是val(i, j); 依题意,字符串A和B有三种可能的情况: 1)A串最后一个字符是空格,B串最后一个字符是字母,则val(i, j) = val(i-1, j) + k; 2)A串最后一个字符时字母,B串最后一个字符时空格,则val(i, j) = val(i, j-1) + k; 3)A串和B串最后一个字符均是字母,则val(i, j) = val(i-1, j-1) + dist(a i , b i ); 由上可知,val(i, j)具有最优子结构性质,且满足如下递推式: val(i, j) = min{ val(i-1, j) + k,val(i, j) + k,val(i-1, j-1) + dist(a i , b i ) } (使用动态规划算法,自底向上的计算各个子问题并利用每次计算的结果,避免重复运算,从而降低算法复杂度。)

从动态规划递归式可知,算法的时间复杂度为O(mn),m和n分别是字符串A和B的长度。 代码如下: #include #include #define MAX 100000//标识最大的可能整数 int val[300][300]; std::string stra;//字符串A std::string strb;//字符串B int k;//定值k //返回字符a与b的ASCII码的差的绝对值 int dist(char a,char b) { return abs(a-b); } int comp()

字符串排序

总共6道题 思路:运用冒泡或者选择排序进行,通过字符的ASCII决定大小。 ********************************************************************* ★题目71(字符串左右排序题,无忧ID6) 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx 中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 则处理后字符串 d c b a e f g h 4 3 2 1 9 5 6 7 8 部分源程序存在文件prog1.c中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 (见源程序)

题目50(字符串左右排序交换题) 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx 中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 d c b a h g f e 4 3 2 1 9 8 7 6 5 则处理后字符串 h g f e a b c d 8 7 6 5 9 1 2 3 4 部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

《字符串比较函数大全》

字符串比较函数 2009-05-02 12:06:17| 分类:技术|字号订阅 函数名: stpcpy 功能: 拷贝一个字符串到另一个 用法: char *stpcpy(char *destin, char *source); 程序例: #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1); printf("%s\n", string); return 0; } 函数名: strcat 功能: 字符串拼接函数

用法: char *strcat(char *destin, char *source); 程序例: #include #include int main(void) { char destination[25]; char *blank = " ", *c = "C++", *Borland = "Borland"; strcpy(destination, Borland); strcat(destination, blank); strcat(destination, c); printf("%s\n", destination); return 0; } 函数名: strchr 功能: 在一个串中查找给定字符的第一个匹配之处\ 用法: char *strchr(char *str, char c); 程序例: #include

字符串的全排列问题

有限个字符排列,相邻字符有限制,求排列方式。 2009-10-27 8:40 递推: 现须求排列方式数f[n],则列出所有前n-1个字符与最后一个字符的组合。 XXXXXXO E,F XXXXXXE E,F,O XXXXXXF E,F,O 可知无论前n-1个字符是什么,第n个字符取E或F都不符合要求,这种情况下,有2*f[n-1]中排列方式。如果第n-1个字符是E 情况下,有2*f[n-2]种排列方式。 递推公式:f[n] = 2*f[n-1] + 2*f[n-2]; 递推(剪去不符合要求的情况): 不符合要求的情况: XXXXXEOO F 即第n,n-1个字符由OO组成,第n-2个字符可以是E或F,第0...n-3个字符任取,有2*f[n-3]种排列方式。 递推公式:f[n] = 3*f[n-1] - 2*f[n-3]。 动态规划: 定义长度为n,第n个字符为i的排列方式数为f[n][i]。其中i取0代表最后一个字符为O,i=1为E,i=2为F。 f[n][0] = f[n-1][1] + f[n-1][2] f[n][1] = f[n-1][0] + f[n-1][1] + f[n-1][2] f[n][2] = f[n-1][0] + f[n-1][1] + f[n-1][2] 可知f[n][1]==f[n][2],则式子可变换为: f[n][0] = 2*f[n-1][1]; f[n][1] = f[n-1][0] + f[n][0]; 初始化f[1][0]=1,f[1][1]=1; 长度为n的字符串排列方式数= f[n][0] + 2*f[n][1] #include "iostream" //__int64 f[40] = {1,3}; __int64 f[40][2] = {0,0,1,1}; //void init() //{ // for(int i=2;i<40;i++) // f[i] = 2*(f[i-1]+f[i-2]); //} void init2() { for(int i=2;i<40;i++) { f[i][0] = 2*f[i-1][1];

微机原理实验报告——字符串排序

一、实验名称:字符串排序 二、实验目的: ⑴学习利用系统功能调用的“INT 21H”进行字符的输入、字符串的显示方法,熟悉排 序相关指令及方法。 ⑵掌握汇编语言的编写、编译、连接及运行方法。 三、实验内容: ①利用INT 21H的1号功能,从键盘输入任意长度的字符串,以回车符结束。 ②将输入的字符串存放在数据段中。 ③对输入的字符串按ASCⅡ码从小到大排序(ASCⅡ码小者占低地址存放)。 ④将排好序的字符串利用INT 21H的9号功能显示在微机屏幕上。 四、程序流程图: 定义堆栈段、数据段 分配各段 调用输入程序,输入 并存储一个字符 NO 输入是否 为回车键 YES 冒泡法对存储单元中 的内容排序 使用INT 21H的9号功能, 将排好序的字符串输出 返回DOS

五、结论: 程序运行时,从键盘上输入包含数字、大、小写字母的字符串,回车后,屏幕上显示字符ASCⅡ码从小到大排列的结果。 六、实验心得: 通过实验,首先,我进一步理解学习了冒泡法排序的具体过程:冒泡法的外层循环次数等于其排序总数减一,每层内循环次数等于外循环总数减去已执行的次数。第二,在编写程序时,如若程序太长,最好将一段反复使用的程序段编成子程序,在主程序中反复调用即可。第三,在使用INT 21H的各种功能时,要注意将功能号值付给AH,并需正确使用入口、出口参数。最后,堆栈段、数据段使用时要特别注意,堆栈段必须重新定义,程序中使用数据段时也要对数据段进行重新定义,否则程序将产生错误。 附:程序清单 STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS DA TA SEGMENT X DB 100 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK MAIN PROC MOV AX,DATA MOV DS,AX MOV SI,OFFSET X CALL INPUT SUB SI,2 MOV BX,SI NEXT3:MOV CX,BX MOV SI,OFFSET X NEXT2:MOV AL,[SI] CMP AL,[SI+1] JBE NEXT1 XCHG AL,[SI+1]

字符串比较解读Like运算符

字符串比较解读Like运算符 Like运算符是字符串比较时经常使用的运算符,也是VBA较难掌握的运算符。 语法: 结果= 字符串Like 模式 如果字符串与模式匹配,结果为True,否则为False。但是如果Like两端的字符串和模式有一个为Null,则结果为Null。 VBA内建的模式匹配功能提供了丰富的字符串比较方式,在模式表达式中可以使用通配符、字符列表(或字符区间)的任何组合来匹配字符串。 模式中的字符与模式匹配的字符串中的字符 ? 任何单一字符 * 零个或多个字符 # 任何一个数字(0-9) [字符列表] 字符列表中的任何一个字符 [!字符列表] 不在字符列表中的任何一个字符 其它字符(串) 与自身匹配 1.Like在字符串比较时受Option Compare语句的影响,在默认情况下(Option Compare Binary),字符比较根据内部二进制表示法(ASCII码)进行,是区分大小写的,此时"A" Like "a" 的结果为False。如果声明了Option Compare Text,则不区分大小写比较,"A" Like "a" 的结果为True。 后面的讨论假设默认情况下。 2.如果模式中没有使用通配符(?、*、#)和字符列表,此时Like运算符等价于=(等号)运算符。下面表达式的结果相同。 s Like "AB" s = "AB" 3.字符列表 理解字符列表的用法是学会Like的难点,所以,下面我会多花些笔墨帮你理解它。 (1)一个字符列表匹配的是字符串中的一个字符,不管字符列表中实际有多少个字符。 "A" Like [ABCDEGHIJ2345] 结果为True "AB" Like [ABCDEGHIJ2345] 结果为False 唯一的例外是[]被看作长度为零的字符串。 (2)字符列表中的单个字符,没有顺序要求,上面[ABCDEGHIJ2345]和[ACDEGHIJ2345B]、 [3ABCDEGHIJ245]...等等是一样的表达。 (3)字符列表中一段连续的字符(称为区间,一个字符列表可以有多个区间,广义上,单个字符也可被看作一个区间),可以使用连字符(-,减号)简化表达式,如上面的表达式[ABCDEGHIJ2345]可以简化为[A-EG-J2-5],连字符要遵循从小到大的顺序(升序),即连字符(-)右端的字符应大于左端的字符,如其中的A-E不能写成E-A,后者系统会报错。但多个区间之间没有顺序要求,这意味着[G-J2-5A-E]、[2-5G-JA-E]...等是同一表达。但下面的表达是错误的,同时也是常见的: [A-E G-J 2-5]、[A-E,G-J,2-5]、[A-E;G-J;2-5] 也许只是一种习惯或想当然,第一个除了要求表达的ABCDEGHIJ2345外,还多加了一个空格;后面两个分别多了逗号(,)和分号(;)。 "," Like [A-EG-J2-5] 结果为False "," Like [A-E,G-J,2-5] 结果为True (4)被中括号([])括起的字符列表中的字符,?、*、#不被理解为通配符,而是表示符号自身。如果要表示-(减号,连字符),可以放在列表的开头或结尾。如[ABC-]、[-ABC]。

用冒泡法对6个字符串按由小到大的顺序进行排序

下列给定程序中,函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include #include #define MAXLINE 20 /*************found**************/ fun(char *pstr[6]) { int I, j; char *p; for(I=0;I<5;I++) {for(j=I+1;j<6;j++) /*************found**************/ { if(strcmp(*(pstr+I),pstr+j)>0) { p=*(pstr+I); /*************found**************/ *(pstr+I)=pstr+j; *(pstr+j)=p; } } } } void main() { int i; char *pstr[6],str[6][MAXLINE]; system("CLS"); for(i=0;i<6;i++) pstr[i]=str[i]; printf("\nEnter 6 string(1 string at each line):\n "); for(i=0;i<6;i++) scanf("%s",pstr[i]); fun(pstr); printf("The strings after sorting:\n "); for(i=0;i<6;i++) printf("%s\n ",pstr[i]); } (1)错误:fun(char *pstr[6]) 正确:void fun(char *pstr[6]) (2)错误:if(strcmp(*(pstr+I),pstr+j)>0) 正确:if(strcmp(*(pstr+I),*(pstr+j))>0) (3)错误:*(pstr+I)=pstr+j; 正确:*(pstr+I)= *(pstr+j);

第10类 按指定条件对字符串进行排序

第10类按指定条件对字符串进行排序 第72套试题答案及解析 【审题关键句】以行为单位对字符按从大到小排序,结果仍按行重新存入字符串数组中。 【解题思路】 ①首先定义字符变量ch和无符号整型变量i、j、k。 ②对字符二维数组XX,在第一层for循环中,变量i从0开始,依次递增直到其值等于maxline,实现对文章每行的扫描,在第二层for时循环中,变量j从0开始,依次递增直到其值等于strlen(xx[i]),即第i行的长度。在第三层循环语句中,变量k从j开始,依次递增直到其值等于strlen(xx[i]),对每一行中的数组元素xx[il[j]、XX[i][k]按照它们的ASCII码值的大小进行比较,如果xx[i][j]的ASCII码小于XX[i][k]的ASCII码,则两者交换,实现整篇文章中的字符按ASCII码值从大到小的顺序进行排序。 【参考答案】 第73套试题答案及解析 【审题关键句】以行为单位从字符串左边部分降序排序,右边部分升序排序。如果原字符串长度为奇数,则最中间的字符不参加处理。 【解题思路】 ①定义字符局部变量ch,整型循环变量i、j、k和表示字符串长度的变量

len、P。 ②在第一层for循环中,变量i从0开始,依次递增直到其值等于20,在循环体中,首先调用库函数strlen(xx[i])求得字符串xx[i]的长度,把此值转化成整型赋给变量len,用len的值除以2,得到字符串xx[i]的长度的一半赋给变量P;在第二层for循环中,变量J从0开始,依次递增直到其值等于(p.1),在循环体中执行第三层for循环,循环变量k从J+1开始,依次递增直到其值等于P,对字符串xx[i]左半部分的子字符串中的字符xx[i][j]和XX[i][k]按照ASCII码值的大小进行比较,如果)XX[i]D]的ASCII码值小于xx[i][k]的ASCII 码值,则两者进行互换,实现对字符串xx[i]左半部分的子字符串按照降序排列。然后,有if条件语句判断,len对2的余数是否等于1,如果等于1,说明字符串xx[il的长度为奇数,则变量P加1,因为这时字符串的中间字符不参与排序。再对字符串XX[i][j]右半部分的字符串按升序排列。在for循环中,变量J从P 开始,依次递增直到其值等于len.1,在循环体中,执行for循环中,变量k 从j+1开始,依次递增直到其值等于len,对字符xx[i][j]和)xx[i][k]按其ASCII码值的大小进行比较,如果字符xx[i][j]的ASCII码值大于xx[i][k]的ASCII码值,则两者进行互换,实现字符串xx[i]右半部分的字符串按照升序排列。 【参考答案】

相关文档
最新文档