配列の中に格納されている文字列データの文字数を数えるstrlen関数です 文字列データが半角英数字の場合 

そのころ・・・



ソーラー 「ま、まあ、解決したのかな


はい 次 いくよ~~~


とりあえず 元に戻って 元に戻って っと・・・ 


文字列データ"neko"を配列hairetuに格納できたわけだね。」


アレサ「はいっ 格納できました。


#include <stdio.h>

int main(void)

{

char hairetu[]="neko";

printf("%s",hairetu);

return 0;

}


コンパイル結果


neko



アレサ「


このプログラムにおいて


配列hairetu内に文字列データ"neko"が無事に格納できています。


目で数えてnekoは4文字ですが


実際には hairetu内には


'n','e','k','o'の4つの文字データと文字データ'\0'が格納されているので


合計5つの文字データが格納されています。よね。


このnekoのように少ない文字列をhairetu内に格納するのであれば


自分で格納される文字数を数え上げるのは簡単ですが


文字数が増えると自力で数え上げるのは難しくなります。


そこで、ソーラーさん」


ソーラー「は~い」


アレサ「


文字数を数え上げることのできる


strlen関数を導入してみません?


strlen関数は

string(文字列)

length(長さ)


を組み合わせた造語です。


つまり


配列に含まれている文字数の長さを調べることができる関数なのです。


strlen関数はヘッダファイル<string.h>に格納されていますので


使用するときには


次のプログラムのようにプログラムの始めに


ヘッダファイル<string.h>をインクルードします。


#pragma warning(disable: 4996)


#include <stdio.h>

#include <string.h>


int main(void)

{

char hairetu[10000];

int a;

printf("半角英数字で文字列を入力してね\n");

scanf("%s",hairetu);

a=strlen(hairetu);

printf("配列に格納された文字は「%s」です。\n",hairetu);

printf("その文字数は%dです。\n",a);

return 0;

}


このプログラムは


scanf関数によって


hairetu内に格納された文字の文字数をprintf出力表示します。


詳しくみていくと


まず


int a;と変数宣言することによって


strlen関数によって


数え上げられる文字の文字数を格納する変数aを用意します。


printf("半角英数字で文字列を入力してね\n");


によって


半角英数字で文字列を入力することを促す文章が表示され


scanf("%s",hairetu);


により


実際にscanf関数をつかって


コマンドプロンプト画面から入力された文字列を


配列hairetuにとりこみます


☆  ☆  ☆


scanf("%s",hairetu);


のhairetuは


配列hairetuのアドレスを格納するポインタ変数となっています。


ポインタ変数のエピソードをご覧になると


このことはよくわかるのです


つい先走って説明しちゃった💖


                solarplexussより


☆  ☆  ☆



そして次の命令文


a=strlen(hairetu);


によって


scanf関数によって


配列hairetu内に格納された文字の文字数を数え上げ


変数aに格納し


そして


printf("配列に格納された文字は「%s」です。\n",hairetu);

printf("その文字数は%dです。\n",a);

により


配列に格納された文字とその文字数をprintf出力する


という流れとなっています。


このとき


配列hairetu内に格納された文字の文字数が


strlen関数の戻り値となっています。


その戻り値が


int型の変数aに格納されているんですの。


このプログラムをコンパイルして


入力待ち受け画面のコマンドプロンプト画面で


nekofunnjyatta


と入力すると


コマンドプロンプト画面には


半角英数字で文字列を入力してね

nekofunnjyatta(と入力すると)

配列に格納された文字は「nekofunnjyatta」です。

その文字数は14です。


と表示されます。


確かにnekofunnjyattaは14文字です。


strlen関数によって


正確に配列hairetu内に格納された文字数が数え上げられています。


実際には配列hairetu内に格納された文字は\0を含めると15文字ですが


strlen関数は\0の文字数はカウントしていません。


とても親切な設計です。そう思われませんでしょうか?


ソーラーさん(^^)」


ソーラー「???文字数をカウントする・・???


??


そういえば・・・


このカクヨムでは投稿した小説の総文字数が表示されていたね。


もしかして


このstrlen関数をつかって総文字数を表示してるのかな?」


アレサ「このプログラムで


scanf関数によって


アンダーバーが表示されて文字列の入力がうながされたとき


ne ko


とneとkoの間に空白スペースをあけて入力すると


コンパイル結果


EAZY IDECの場合




半角英数字で文字列を入力してね

ne ko(と入力すると)

配列に格納された文字は「ne」です。

その文字数は2です。


と表示されます


つまり


neで文字列が終了しているとコンピュータは認識しており


strlen関数をつかって文字列neの総文字数を数え上げたので


配列に格納された文字は「ne」です。

その文字数は2です。


と表示されたんですの


ですから


カクヨム小説のように空白スペースが大量に含まれている


文字列の数を


strlen関数で数え上げるには工夫が


必要なのではないですか?😊」











  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る