配列の中に格納されている文字列データの文字数を数える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関数で数え上げるには工夫が
必要なのではないですか?😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます