サイトマップ / C言語講座>出入り口>総目次>目次:ポインタ>大文字小文字変換
[特定の文字の現れる位置]←このソース→[変数の値を交換]
標準ライブラリ関数に英小文字であれば大文字を、そうでなければその文字をそのまま返す関数と、英大文字であれば小文字を、そうでなければその文字をそのまま返す関数があります。下記を参照して下さい。
#include <ctype.h> int toupper(int c); 例:toupper(c); 戻り値 c が英小文字であれば大文字、 そうでなければcをそのまま返す #include <ctype.h> int tolower(int c); 例:tolower(c); 戻り値 c が英大文字であれば小文字、 そうでなければcをそのまま返す
大文字と小文字についてはすでに文字列を比較で扱いました。今日は、文字列の各文字に対して同様の操作をする関数を作ります。関数は文字列へのポインタを引数にとり、文字列へのポインタを返します。
関数の名前はStrToLower( )とStrToUpper( )とします。関数の中で、作業用のchar型のポインタpを宣言します。引数として受け取った文字列へのポインタは、文字列の先頭アドレスを指しています。
for ( )ループの( )の中の最初にある初期化の式で、作業用ポインタに引数として受け取ったポインタを代入します。この操作により、作業用ポインタが文字列の先頭アドレスを指します。for ( ) ループの初期化の式は、ループに入る前にただ一回だけ実行されます。
StrToLower( )では、ポインタが指す中身(*p)をtolower( )へ渡します。
StrToUpper( )では、ポインタが指す中身(*p)をtoupper( )へ渡します。
これらの関数はその文字を受け取り、変換の後それを返すので、関数の戻り値を作業用のポインタpの中身に代入します。次いでpの指す位置を1進め、pの指す中身が'\0'なら、for ( ) ループから抜けて、受け取った文字列へのポインタを返して終了します。'\0'でなければ、上記の処理を続けます。
ソースプログラムで、for ( )ループの条件判断式が、単に'*p;'となっていますが、pの指す中身が'\0'なら偽になり、'\0'でなければ真になります。
あとはソースプログラム中のコメントを見て下さい。 */
#include <stdio.h> #include <ctype.h> /* tolower( )とtoupper( )で必要 */ char *StrToLower(char *s); char *StrToUpper(char *s); void main(void); /* 文字列中の英大文字を小文字に変換 */ char *StrToLower(char *s) { char *p; /* 作業用ポインタ */ /* for ( )ループの初期化の式で、pは文字列の 先頭アドレスを指すように初期化される */ for (p = s; *p; p++) /* pがヌルでなければ */ *p = tolower(*p); /* pの指す中身を小文字に変換 */ return (s); /* 文字列の先頭アドレスを返す */ } /* 文字列中の英小文字を大文字に変換 */ char *StrToUpper(char *s) { char *p; /* 作業用ポインタ */ /* for ( )ループの初期化の式で、pは文字列の 先頭アドレスを指すように初期化される */ for (p = s; *p; p++) /* pがヌルでなければ */ *p = toupper(*p); /* pの指す中身を大文字に変換 */ return (s); /* 文字列の先頭アドレスを返す */ } void main(void) { char *str1 = "2 Book Shops"; char *str2 = "3 Bus Stops"; printf("str1: %s\n", str1); /* 小文字に変換 */ printf("StrToLower(str1): %s\n\n", StrToLower(str1)); printf("str2: %s\n", str2); /* 大文字に変換 */ printf("StrToUpper(str2): %s\n", StrToUpper(str2)); } |
/* 今回自作した関数は作業用のポインタで文字列を書き換え、受け取ったポインタはそのまま返す点に注目して下さい。
printf( )の引数に自作した関数を使っています。自作した関数は char型のポインタを返すので、 引数にポインタを要求するprintf( )の引数として使用できます。 */
[特定の文字の現れる位置]←このソース→[変数の値を交換]
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−