はじめに
はじめまして。情報系の専門学校に通っているプログラミング初心者です。今回C言語を使って配列の中の特定の単語の数を数えろ的な課題が学校で出て「JavaやPythonならクソ簡単にできるじゃん」とか言いながら作ったクソコードです。
基本情報の擬似言語に出てきそうなプログラムですがよければ見ていってください。
課題の内容
今回の課題は配列と繰り返し処理を活用し特定の文字列に特定の単語がいくつ含まれているのかを数えるプログラムを作れというものでした。
「abcdhelloefghihellojk」という文字列の中から「hello」を探すと2つあるので「2」と出力すればOKです。いつもはネットでググりながら良さそうなコードをコピペして編集しているのですが、今回のパターンはなかなか見つからずプログラミング初心者の私は中々苦戦しました...
やったこと
配列の先頭から1文字づつ見ていって探したい文字列があったら数えていくといった流れでいけるのかなと思い以下のコードを書いてみました。
コードを書きながらループの内容が追えなくなったり自分でもどうして動いたのかがイマイチ分からない部分もあるのですが一応動いています。
もっといい書き方とかもあると思うのですが、私の現在の力だとこれくらいが限界でした...別のやり方知ってるよ!という方がいらっしゃいましたら是非教えて下さい!
# include <stdio.h>
int main(void){
//変数宣言
char str[100];
char word[100];
int cnt = 0;
int w_cnt = 0;
int temp = 1;
//入力
printf("文字列を入力してください。\n");
scanf("%s",str);
printf("探したい単語を入力してください。\n");
scanf("%s",word);
//探したい単語の文字数をw_cntへ入れる
int i = 0;
while(word[i] != '\0')
{
w_cnt += 1;
i++;
}
//str[]とword[]を比較して単語を探す
for(i = 0; i < str[i] != '\0'; i++) //str[]の文字数だけループを回す
{
if(str[i] == word[0]) //str[i]番目とword[]の1番目の文字を比較
{
int j = 1;
for(j = 1; j < word[j] != '\0'; j++) //word[]の文字数だけループを回す
{
if(str[i+j] == word[j]) //i+j番目の文字を比較
{
temp += 1; //文字が同じならtempに+1する
}
else
{
break; //途中で違ったらループを抜ける
}
}
if(temp == w_cnt) //tempと上で数えたw_cntの数が等しければ単語が見つかった事になる
{
cnt += 1;
}
temp = 1; //tempを初期化
}
}
//出力
printf("単語\"%s\"の数は%d個でした。\n",word,cnt);
return 0;
}