CASL U - 文字列の変換
 前へ 目次へ 次へ

文字列の変換

 文字列の中から特定の文字を別の文字に置き換える処理を考える。
 ここでは、文字列中の数字を記号"%"に変換する副プログラムCHANGEを作成する。

    (変更前) AB12C#D34E  →  (変更後) AB%%C#D%%E

 主プログラムで入力装置から文字列を入力し、文字列の先頭アドレスをGR1、文字長をGR2に格納して副プログラムに渡す。
 入力できる文字数は10文字以内とし、リターンキーだけ(0文字)のときや11文字以上のときは再入力する。

MAIN     START
DIN      IN      MOJI, MLEN
         LAD     GR0, 0
         CPA     GR0, MLEN     ;0文字?
         JZE     DIN           ;再入力.
         LAD     GR0, 10
         CPA     GR0, MLEN     ;11文字以上?
         JMI     DIN           ;再入力.
         LAD     GR1, MOJI
         LD      GR2, MLEN
         CALL    CHANGE
         OUT     MOJI, MLEN
         RET
MOJI     DS      256
MLEN     DS      1             ;入力文字長.
KOSUU    DS      1
         END
CHANGE   START
         RPUSH
         LD      GR4, ='%'     ;記号%
LOOP     LD      GR3, 0, GR1   ;入力文字の1文字.
         CPA     GR3, ='0'     ;文字'0'と比較.
         JMI     NONUM         ;'0'より小さいときNONUMへ.
         CPA     GR3, ='9'     ;文字'9'と比較.
         JPL     NONUM         ;'9'より大きいときNONUMへ.
         ST      GR4, 0, GR1   ;%をメモリに格納.
NONUM    LAD     GR1, 1, GR1   ;アドレスに1加算.
         SUBA    GR2, =1       ;文字数1減算.
         CPA     GR2, =0       ;終わりか?
         JPL     LOOP          ;繰り返し.
         RPOP
         RET
         END

 プログラムとしては、前ページの「文字列の検査」と同じく、検査する文字に一致すれば記号%に置き換える。置き換える処理は該当するアドレスに文字コードのデータを格納するだけである。

    置き換え処理  ST GR4, 0, GR1


 逆に、数字以外の文字を記号"%"に変換する副プログラムCHANGE2を次に示す。

    (変更前) AB12C#D34E  →  (変更後) %%12%%%34%

CHANGE2  START
         RPUSH
         LD      GR4, ='%'     ;記号%
LOOP     LD      GR3, 0, GR1   ;入力文字の1文字.
         CPA     GR3, ='0'     ;文字'0'と比較.
         JMI     CHNG          ;'0'より小さいときCHNGへ.
         CPA     GR3, ='9'     ;文字'9'と比較.
         JPL     CHNG          ;'9'より大きいときCHNGへ.
         JUMP    NEXT          ;NEXTへ.
CHNG     ST      GR4, 0, GR1   ;%をメモリに格納.
NEXT     LAD     GR1, 1, GR1   ;アドレスに1加算.
         SUBA    GR2, =1       ;文字数1減算.
         CPA     GR2, =0       ;終わりか?
         JPL     LOOP          ;繰り返し.
         RPOP
         RET
         END


課題1 英大文字を記号"#"に変換する副プログラムCHANGE3を作成する。
 入力できる文字数は10文字以内とし、リターンキーだけ(0文字)のときや11文字以上のときは再入力する。
 レジスタの値は副プログラム呼び出し前と変わらないようにすること。

    (変更前) AB12C$D34E  →  (変更後) ##12#$#34#




課題2 英大文字を英小文字に変換する副プログラムCHANGE4を作成する。
 入力できる文字数は10文字以内とし、リターンキーだけ(0文字)のときや11文字以上のときは再入力する。
 レジスタの値は副プログラム呼び出し前と変わらないようにすること。

    (変更前) AB12C$D34E  →  (変更後) ab12c$d34e



 前へ 目次へ 次へ
 CASL U Copyright © 2003,2017  Hiroshi Masuda

 

 

inserted by FC2 system