前提・実現したいこと
与えられた単語(以下、クエリと示す)が標準入力されたファイルに対して、含まれていればその一文を出力しようとしています。
(例)
標準入力するファイルtext.txtは以下のようなものとします。
............text.txt................
I was a child.
I can do it as well.
....................................
ここで $ ./a.out "AS" ./text.txt
で実行すると
I can do it as well.
と出力されるようにしたいと考えています。
発生している問題・エラーメッセージ
実行;./a.out "AS" ./text.txt 上記で実行したところ何も出力されませんでした。
該当のソースコード
c言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <ctype.h> 5 6int main(int argc, char* argv[]){ 7 FILE *fp; 8 char buffer[1024]; 9 char query[256]; 10 char temp[256]; 11 char *delimiter = " .,:;?!()"; 12 int n = 0; 13 char *s; 14 int i; 15 16 if(argc != 3){ 17 printf("parameter error\n"); 18 exit(1); 19 } 20 21 // 第2引数をクエリとしてコピー 22 strcpy(query, argv[1]); 23 i = 0; 24 while(query[i] != '\0'){ 25 query[i] = toupper(query[i]); 26 i++; 27 } 28 29 if((fp = fopen(argv[2], "r")) == NULL){ 30 printf("file open error\n"); 31 exit(1); 32 } 33 34 while(fgets(buffer, sizeof(buffer), fp) != NULL){ 35 buffer[strlen(buffer) - 1] = '\0'; 36 //読み込んだ一列をtempに保存(出力用) 37 strcpy(temp, buffer); 38 39 // 大文字に統一 40 for(i=0; buffer[i] != '\0'; i++){ 41 buffer[i] = toupper(buffer[i]); 42 i++; 43 } 44 45 // strtok関数を利用して単語ごとで抜き出し、クエリと比較 46 s = strtok( buffer , delimiter ); 47 if ( s != NULL ) { 48 // クエリと単語が一致すれば、その一文を出力 49 if(strcmp(s, query) == 0){ 50 printf("%s\n", temp); 51 } 52 } 53 54 while( ( s = strtok( NULL , delimiter ) ) != NULL ) { 55 if(strcmp(s, query) == 0){ 56 printf("%s\n", temp); 57 } 58 } 59 60 61 } 62 63 fclose(fp); 64 65 exit(0); 66} 67
補足情報(FW/ツールのバージョンなど)
strtok関数を用いて,予め定義しておいたdelimiterで単語ごとに区切り、先頭アドレスをsに代入しています。
sと入力単語(query)が等しければ、その文が出力されるようにしたのですが、何も出力はされませんでした。
どなたかご教示していただけると幸いです。
回答2件
あなたの回答
tips
プレビュー