サイトマップ / C言語講座出入り口総目次目次:ポインタ>文字列の長さ

青い直線

文字列の長さ

青い直線

[コーディングスタイル]←このソース→[文字列を比較]

/* ソースプログラムの説明

ポインタを使って、文字列の長さを求める関数、StrLength( )を作ります。

文字列へのポインタを関数へ渡した時点では、ポインタは文字列の最初の要素を指しています。Cの文字列はヌル文字('\0')で終わっています。そこで、int型の変数を宣言して、これをカウンタとして使います。カウンタとして使うため、0に初期化しておきます。ポインタの指す中身を見て、もし、'\0'ならカウンタの値を戻り値にしてリターンします。'\0'でなければ、ポインタをインクリメントし、カウンタに1加えます。

上記のアルゴリズムをそのままコードにしたのが案1です。

    案1
    int StrLength(const char *s)
    {
        int n = 0;

        while (*s++ != '\0')
            n++;
        return (n);
    }

案2は、案1を更に簡潔にしたものです。'*s++'が'\0'ならば、'*s++'を評価した結果が偽となり、ループから抜けます。

    案2
    int StrLength(const char *s)
    {
        int n = 0;

        while (*s++)
            n++;
        return (n);
    }

今日のソースプログラムでは、StrLength( )を使って、2つの文字列s1とs2の長さを比較して、s1の方が長ければプラスの値を、等しければ0を、s2の方が長ければマイナスの値を返す関数、CompStrLength( )も作ります。この関数は、単にStrLength( ) を呼び出して、s1 とs2の長さを求めてその差を返すだけです。このように単純な関数でも、ソースプログラムを明確にするのに役立ちます

CompStrLength( )については、ソースプログラムを見て下さい。 */

/* ここからソースプログラム */

#include  <stdio.h>

void main(void);
int StrLength(const char *s);
int CompStrLength(const char *s1, const char *s2);

  /* 文字列の長さを返す */
int StrLength(const char *s)
{
    int n = 0;          /* カウンタを0に初期化 */

    while (*s++)        /* sが'\0'でなければ */
        n++;            /* カウンタを1増やす */
    return (n);         /* 文字列の長さを返す */
}

  /* 文字列の長さの差を返す */
int CompStrLength(const char *s1, const char *s2)
{      /* s1とs2の長さの差を返す */
    return (StrLength(s1) - StrLength(s2));
}

void main(void)
{
    int n;
    char str1[ ] = "Long long long string.";
    char str2[ ] = "Short string.";

    printf("Str1:%s\n", str1);
    printf("Str2:%s\n", str2);

                           /* str1の方が長ければ */
    if ((n = CompStrLength(str1, str2)) > 0)
        printf("str1の方がstr2 より長い\n");

    else if (n == 0)       /* 長さが等しければ */
        printf("str1とstr2は同じ長さ\n");

    else                   /* str2の方が長ければ */
        printf("str2の方がstr1より長い\n");
}

/* ここまでソースプログラム */

/* StrLength( )と同等のものがライブラリ関数にあります。

    #include <string.h>
    size_t strlen(const char *s);

    例:n =  strlen(s);

    戻り値    '\0'を含まない文字列sの長さ

size_tはstring.hの中で、次のように型宣言されています。

    typedef unsigned size_t;

*/

[コーディングスタイル]←このソース→[文字列を比較]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:ポインタ>文字列の長さ