問題
ファイル .txt から文字を読み込み、文章中で単語の "the" が何回出現しているのかをカウントする。ただし、大文字と小文字は区別しない。また、単語中に出現する the、例えば "gather" に含まれる "the" はカウントしない。
会話内容は「"」で囲んで表記される( "The United States ~" など)。発言内容の先頭に出現する "the" はカウントの対象に含めることとする。
###自分で考えた方針
0. まず、fpとしてファイルを読み込む。
- 大文字のTをtに統一する。一文字ずつ読み込むことにする。
- 次に、アルファベット以外(a,A~z,Z)の「,」「"」「.」などを消すため、NULLとして上書きする。
そうしてできたのをfp2として、theを検知する。
###これ以降わからないです。
自分としては、fscanfで文字列をとってくるにしても、長さがバラバラでとれない?ような感じがします。
ぜひとも、解答のヒントや解答をご教授ください。
#include<stdio.h> #include<string.h> int main(void){ FILE *fp,*fp2; fp = fopen("un.txt","r"); if(fp == NULL){ printf("error\n"); return -1; } else{ puts("file opened"); } //以下が大切 char c; while(fscanf(fp,"%c",&c) != EOF){ //小文字に揃える if('A' <= c && c <= 'Z'){ c = c - ('A' - 'a'); } else if('a' <= c && c <= 'z'){ continue; } //a~z以外をNULL else { c = 0; } fprintf(fp2, "%c", c); } int count = 0; //英単語を文字列に割り当てたい char s[]; while(fscanf(fp2,"%s",s) != EOF){ if(s[0] = 't' && s[1] == 'h' && s[2] == 'e'){ count++; } } printf("%d",count); return 0; }
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 23:52