[環境]
Mac El Captain 10.11.6
ターミナルにてemacsを使用
コンパイラはgcc
#include<stdio.h>
#include<string.h>
#define BUFF_MAX 128
int SearchAndCountWord(const char *search_wrd){
char ch; //getcharでの入力をひとまず保持
char word_buff[BUFF_MAX] = {0}; //ここに文字列を格納して比較する
int cnt = 0; //カウント用の変数、配列の何番目に文字を入れるかの決定
int word_cnt = 0; //単語の出現回数を格納
printf("Search word is \"%s\"\n", search_wrd);
while(1){ //EOF検知まで無限ループ
ch = getchar(); //テキストから一文字入力
printf("%c", ch); //ひとまず表示してみる
if(ch == ' ' || ch == '\n' || ch == EOF){ //入力がスペース・改行・テキスト末端いずれかで
if(word_buff[cnt - 1] == ',' || word_buff[cnt-1] == '.'){ //かつその前がコンマかピリオドなら
word_buff[cnt - 1] = '\0'; //nullにする
}
if((strcmp(word_buff,search_wrd)) == 0){ //内容が一致なら
word_cnt++; //カウントする
for(int j = 0; j < BUFF_MAX; j++) //バッファをnullで埋める(初期化)
word_buff[j] = '\0';
cnt = 0; //文字の挿入位置を最初に戻す
}else{
word_buff[cnt] = ch; //上の条件にヒットしなければ単語の途中なので文字を入れる
cnt++; //次の配列番号に移動
}
}
if(ch == EOF){ //EOF検知でループ脱出
printf("[EOF]");
break;
}
}
return word_cnt;
}
int main(int argc, char **argv){
int word_cnt[argc - 1];
for(int i = 1; i < argc; i++){
word_cnt[i] = SearchAndCountWord(*(argv+i));
}
for(int i = 1; i < argc; i++)
printf("\n%s : %d times\n", *(argv+i), word_cnt[i]);
return 0;
}
[テキスト test.txt の内容]
char int int double float char void char double int void
[実行結果]
PC名:ディレクトリ名 ユーザー名$ ./test int void char < ./test.txt
Search word is "int"
char int int double float char void char double int void?[EOF]
int : 0 times
Search word is "void"
?[EOF]
void : 0 times
Search word is "char"
?[EOF]
char : 0 times