大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal入门>>ASCⅡ码字符串输出         本站全文搜索: 友情提示:

ASCⅡ码字符串输出
http://www.mydrs.org  1/25/2002  大榕树


一、问题描述
    已知两个字符串及其长度,要求将这两个字符串按ASCⅡ码顺序排列输出。
二、算法设计
    输入:字符串的长度可以设为 m , n ;存储的两个字符串可高为数组 A[1..m], B[1..n]。
    判断方法:
    i 从 1 开始,比较 A[i] 和 B[i]:
    A[i] > B[i]     则 B 在前,A 在后;
    A[i] < B[i]     则 A 在前,B 在后;
    A[i] = B[i]     继续对 A[i+1] 和 B[i+1] 比较。
    可能发生的情况是逐个字符比较时都相等,这时短的字符串便排在前面;如果两个字符相同而且长度相同,那么它们的排列顺序也无所谓谁在前,谁在后。
    特殊情况是字符串长度( m 或 n )≤0 ,这种情况可以作为出错处理。
三、程序设计
    比较两个字符串的顺序可以用一个过程 comp 来实现,比较结果可借助于一个变量参数 k 来存储。
    例如:可以约定:
    K=2       用于控制比较进行(循环控制变量)
    K=-1      表示 A 在 B 前,比较结束
    K=0       表示 B 在 A 前,比较结束
四、程序清单
Pascal:
PROGRAM e101;
  CONST maxlen=20;
  TYPE a=ARRAY[1..maxlen] OF CHAR;
  VAR
    m, n, i, j, k: integer;
    a, b: s;
PROCEDURE comp (A, B: s; m, n: integer; VAR k: integer);
  VAR i: integer;
  BEGIN
    i:=1;k:=2;
    WHILE K=2 DO
      BEGIN
        IF i=m+1 THEN K:=-1
        ELSE
          IF i=n+1 THEN k:=1
            ELSE BEGIN
                   IF A[i] < B[i] THEN k:=-1;
                   IF A[i] > B[i] THEN k;=1;
                 END
       END
  END;
BEGIN
  REPEAT
    writeln ('Input length two string:');
    readln(m ,n);
    IF (m<=0) or (n<=0) THEN writeln('Length >0!!')
  UNTIL (m>0) and (n>0);
    writeln('Input first string:');
    FOR j:=1 to m DO read(A[j]); readln;
    writeln('Input second string:');
    FOR j:=1 to n DO read(B[j]); readln;
    comp (A, B, m, n, k);
   IF k=-1 THEN BEGIN
                   FOR i:=1 TO m DO write(A[i]); write(',');
                   FOR i:=1 TO n DO write(B[j]);writeln;
                 END
   IF k=1 THEN BEGIN
                   FOR i:=1 TO m DO write(B[i]); write(',');
                   FOR i:=1 TO n DO write(A[j]);writeln;
                 END
   readln
END.
 
    由于在两个字符串的比较中,比较容易发现哪一个大,哪一个小,所以其算法可以简单地表示为:
QBASIC程序:
CLS
DO
  INPUT "M="; m
  INPUT "n="; n
  IF m > 0 AND n > 0 THEN EXIT DO
LOOP
DO
  INPUT "a$=", a$
  INPUT "b$=", b$
  IF m = LEN(a$) AND n = LEN(b$) THEN EXIT DO
LOOP
IF m < n THEN SWAP m, n:SWAP a$, b$
FOR i = 1 TO n
  c$ = MID$(a$, i, 1)
  d$ = MID$(b$, i, 1)
  IF c$ < d$ THEN
    PRINT a$; " "; b$
    EXIT FOR
  ELSE
    IF c$ > d$ THEN
      PRINT b$; " "; a$
      EXIT FOR
    END IF
  END IF
NEXT
END
    注意:若将问题中的字符串理解为英文字母组成的单词,那么输出的排列结果即为字典的顺序。要用这里设计的算法排列单词的字典顺序,算法中的字符串长度 m,n 的输入将会显得十分烦琐,应将长度隐含在单词的输入之中。例如:可以约定单词输入后再输入一个特别约定的字符作为结束输入一个单词的标记。
相关下载:JSLT1-1.BAS

来 源:淮安市信息技术教学教研网
共有4087位读者阅读过此文

  • 上篇文章搜索算法基础教程
  • 下篇文章求N的不同因数的个数

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8306]
    2. 七类高中生具有保送资格 [5910]
    3. NOI2006获奖选手名单 [4955]
    4. 关于举办NOIP2006模拟赛的通告 [4106]
    5. Turbo Pascal各语句运行速... [3594]
    6. Turbo王者归来新Delphi免费... [3181]
    7. IOI2006我国4名选手全部获得金... [2945]
    8. 关于APIO2007与IOI2007... [2763]
    9. noip倒计时 by 枯叶蝴蝶 [2683]
    10. 朱泽园:思想上的金牌更重要 [2168]
    ASCⅡ码字符串输出
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号