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