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

1.3 文字列処理関数

 文字列を処理するための関数が標準ライブラリとして用意されている。ここでは、これらの標準ライブラリの使い方を学習する。

(関数strlen)
入力した文字列の文字数を表示する。[pro1-4.c]

#include <string.h>
int strlen(char *str);

文字列の長さを得る。

 #include <string.h>は、関数strlenを使用するときに必要な定義などが書かれているファイルstring.hを取り込むためのものである。(プリプロセッサ命令)

 関数strlenの引数として文字列の格納アドレスを指定する。例えば、配列mojiに"abcde"が格納されているとき、strlen(moji) は5という値が得られる。

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
#include <stdio.h>
#include <string.h>

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

    printf("文字列 : ");    /* プロンプト表示 */
    gets(buff);            /* 文字列入力 */
    printf("文字数は%dです\n", strlen(buff));    /* 入力文字数計算・表示 */
    return(0);
}
実行結果
文字列 : abcd
文字数は4です

 このように配列に格納されている文字数がわかれば、for文で1文字ずつ何かの処理をすることもできる。一般的にはポインタを使用するが、これについては後で説明する。

 

入力した文字列(英小文字)を大文字に変換して表示する。[pro1-5.c]

 英小文字を大文字に変換するには、文字コード表からもわかるように、英小文字の文字コードから0x20を減じれば大文字の文字コードに変換できる。

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char buff[256];   /* 入力文字列用 */
    int n;            /* for文用 */
 
    printf("英小文字 : ");    /* プロンプト表示 */
    gets(buff);             /* 文字列入力 */
    for(n = 0; n < strlen(buff); ++n)
        buff[n] = buff[n] - 0x20;      /* 大文字変換 */
    printf("文字列は%sです\n", buff);    /* 入力文字列表示 */
    return(0);
}
実行結果
英小文字 : abcde
文字列はABCDEです

 11行目のfor文で、0から(文字数-1)まで12行目をくり返している。
 12行目の式を buff[n] = buff[n] + 0x20; に変えれば、英大文字を小文字に変換できる。
 ただし、元の文字が小文字または大文字であるかを確認をしていないので、違う文字を入力すると正しい結果は得られない。
 入力した文字列の英小文字だけを大文字に変換するには、次のようにif文で小文字かどうかを判定し、小文字のときだけ buff[n] = buff[n] - 0x20; の計算をする。
if(buff[n] >= 'a' && buff[n] <= 'z')    /* buff[n]がa〜zの範囲にあれば真 */

 

【練習問題1-2】 入力した文字列の英大文字だけを小文字に変換して表示する。 [ren1-2.c]

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char buff[256];    /* 入力文字列用 */
    int n;             /* 文字数用、for文用 */
  
    printf("文字列 : ");    /* プロンプト表示 */
    gets(buff);            /* 文字列入力 */
    for(n = 0; @          ; ++n)
        if(A                            )   /* buff[n]が小文字? */
            buff[n] = buff[n] + 0x20;     /* 大文字変換 */
    printf("文字列はB    です\n", buff);   /* 入力文字列表示 */
    return(0);
}
実行結果
文字列 : abc123deXyZ
文字列はABC123DEXYZです

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

 

入力した2つの文字列の文字数の合計を表示する。[pro1-6.c]

 2つの配列、例えばbuff1, buff2を用意し、文字列入力後、次に各文字列の長さを次の式で加算する。

len = strlen(buff1) + strlen(buff2);
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char buff1[256];    /* 入力文字列 */
    char buff2[256];    /* 入力文字列 */
    int len;            /* 文字数 */

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

    len = strlen(buff1) + strlen(buff2);
    printf("文字数は%dです\n", len);    /* 文字数表示 */
    return(0);
}
実行結果
文字列1 : abcd
文字列2 :
efgh
文字数は8です

 もう一つの手法は、2つの文字列を連結してから文字列の長さを関数strlenで得る方法である。文字列の連結については、後で説明する。


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

 

 

inserted by FC2 system