C言語-文字列処理
前へ 目次へ 次へ 

1.4 ポインタ (2)

入力した文字列の英小文字だけを大文字に変換して表示する。[pro1-14.c]

 英小文字だけを大文字に変換するには、小文字かどうかを判定し、0x20を減算する方法が考えられるが、ここでは標準ライブラリを使用する。

#include <ctype.h>
int toupper(int ch);

文字chが英小文字であれば、大文字に変換した値を返し、それ以外はそのままの値を返す。

#include <ctype.h>
int tolower(int ch);

文字chが英大文字であれば、小文字に変換した値を返し、それ以外はそのままの値を返す。

 

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char buff[256], *pb;    /* 入力文字列 */

    pb = buff;    /* ポインタ変数初期化 */

    printf("文字列 : ");    /* プロンプト表示 */
    gets(buff);            /* 文字列入力 */

    while(*pb){    /* ヌル文字まで繰り返す */
        *pb = toupper(*pb);    /* 大文字変換 */
        ++pb;
    }
    printf("文字列は%sです\n", buff);    /* 表示 */
    return(0);
}

実行結果

文字列 : abc123CDEfgh
文字列はABC123CDEFGHです


 14行目でポインタ演算子を使用している。例えば、pb = toupper(*pb);とすると、pb番地が0x100番地でその内容がa(0x61)のとき、関数toupperでA(0x41)に変換され、ポインタ変数pbに格納される。したがって、ポインタ変数pbの値が0x100から0x41になり、配列のアドレスとは全く違う番地を格納することになる。

ポインタ

【関数test_pointerの使用】

実行結果

文字列 : abcd
BUFFER DATA = Abcd@
POINTER ($) = $
BUFFER DATA = ABcd@
POINTER ($) =  $
BUFFER DATA = ABCd@
POINTER ($) =   $
BUFFER DATA = ABCD@
POINTER ($) =    $
文字列はABCDです

 3行目に extern void test_pointer(char *, char *); を追加する。
 15行目でポインタ変数を加算する前に test_pointer(buff, pb); を挿入する。
 コンパイルは次のように行う。

    --- MS-DOS ---
    > cc pro1-14.c test_pnt.c

    --- UNIX ---
    % gcc pro1-14.c test_pnt.c

 ポインタの位置($)の文字が大文字に変換されている。



【練習問題1-7】 暗号文作成プログラムを作成する。[ren1-7.c]
 暗号のプログラムにはいろいろなアルゴリズムがあるが、ここでは文字コードに1を加算して暗号文を作成することにする。

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>

int main(void)
{
    char buff[256], *pb;    /* 入力文字列 */

   @              ;    /* ポインタ変数初期化 */

    printf("暗号文作成プログラム\n");
    printf("文字列 : ");    /* プロンプト表示 */
    gets(buff);            /* 文字列入力 */

   A                  {      /* ヌル文字まで繰り返す */
        B                      ;    /* 暗号に変換 */
        ++pb;
    }
    printf("暗号文 : C    \n", buff);
    return(0);
}
実行結果

暗号文作成プログラム
文字列 :
masuda
暗号文 : nbtveb


[解答欄] (すべて半角文字で、空白文字もチェックされます。)
@   A   B   C
     




【練習問題1-8】 暗号文解読プログラムを作成する。[ren1-8.c]
 【練習問題1-7】の暗号文を解読するプログラムを作成する。
 ヒント:暗号文は各文字の文字コードに1を加算して作成されている。

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>

int main(void)
{
    char buff[256], *pb;     /* 入力文字列 */

                                                           

    printf("暗号文解読プログラム\n");
                                                           
                                                           

                                                           
                                                           
                                                           
                                                           
    printf("暗号文 : %s\n", buff);    /* 表示 */
    return(0);
}
実行結果

暗号文作成プログラム
文字列 :
nbtveb
暗号文 : masuda


 


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system