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 |
14行目でポインタ演算子を使用している。例えば、pb = toupper(*pb);とすると、pb番地が0x100番地でその内容がa(0x61)のとき、関数toupperでA(0x41)に変換され、ポインタ変数pbに格納される。したがって、ポインタ変数pbの値が0x100から0x41になり、配列のアドレスとは全く違う番地を格納することになる。
【関数test_pointerの使用】
文字列 : abcd |
--- 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); } |
暗号文作成プログラム |
【練習問題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); } |
暗号文作成プログラム |
Copyright © 2001 Hiroshi Masuda |