サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−