「word_search.c」の編集履歴(バックアップ)一覧はこちら

word_search.c」(2007/08/02 (木) 08:33:32) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//c #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE_SIZE 256 #define CMD_SIZE 100 extern FILE *txtfile; //単語検索 void word_search(char *txtname) { int i , j , k , l = 0 ; int line[1000] ; //単語出現数は1000回まで char str[LINE_SIZE], word[CMD_SIZE]; fgets(word, CMD_SIZE, stdin); //単語のサイズは99まで for(i=1;!feof(txtfile);i++) //1行読み込む毎にiをカウント { fgets(str,LINE_SIZE,txtfile); //まず一行全部読み込む for(j=0;str[j]!='\n';j++) //読み込んだ行の中に単語が含まれていないか探す { if( str[j] == EOF ) break; for(k=j;word[k-j]==str[k];k++) { if(word[k-j+1]=='\n') //含まれていたら { line[l] = i ; //その行番号をline[]に入れる l++; } } } for(k=0;k<j;k++) { str[k] = '\0' ; } } txtfile = freopen(txtname,"r",txtfile); //line[]に入れた行番号からその行を出力する for(i=0;i<l;i++) { if( i == 0 ) { for(j=1;j<=line[0];j++) fgets(str,LINE_SIZE,txtfile); k = line[0]; printf("%d : %s",line[0],str); if( feof(txtfile) ) { printf("\n"); } } else if( line[i] != line[i-1] ) //1行にいくつもある場合はとばす { for(j=k+1;j<=line[i];j++) fgets(str,LINE_SIZE,txtfile); k = line[i]; printf("%d : %s",line[i],str); if( feof(txtfile) ) { printf("\n"); } } } }
//c #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINE_SIZE 256 #define CMD_SIZE 100 extern FILE *txtfile; //単語検索その1・・・単語を含んだ文字列の検索。例えばprogramを検索するならprogramingも表示する void word_search1(char *txtname) { int i , j , k , l = 0 ; int line[1000] ; //単語出現数は1000回まで char str[LINE_SIZE], word[CMD_SIZE]; printf("検索したい文字列を入力して下さい\n"); fgets(word, CMD_SIZE, stdin); //単語のサイズは99まで for(i=1;!feof(txtfile);i++) //1行読み込む毎にiをカウント { fgets(str,LINE_SIZE,txtfile); //まず一行全部読み込む for(j=0;str[j]!='\n';j++) //読み込んだ行の中に単語が含まれていないか探す { if( str[j] == EOF ) break; for(k=j;word[k-j]==str[k];k++) { if(word[k-j+1]=='\n') //含まれていたら { line[l] = i ; //その行番号をline[]に入れる l++; } } } for(k=0;k<j;k++) { str[k] = '\0' ; } } txtfile = freopen(txtname,"r",txtfile); //line[]に入れた行番号からその行を出力する for(i=0;i<l;i++) { if( i == 0 ) { for(j=1;j<=line[0];j++) fgets(str,LINE_SIZE,txtfile); k = line[0]; printf("%d : %s",line[0],str); if( feof(txtfile) ) { printf("\n"); } } else if( line[i] != line[i-1] ) //1行にいくつもある場合はとばす { for(j=k+1;j<=line[i];j++) fgets(str,LINE_SIZE,txtfile); k = line[i]; printf("%d : %s",line[i],str); if( feof(txtfile) ) { printf("\n"); } } } } //単語検索その2・・・単語そのものの検索。例えばprogramを検索するのにprogramingを検索してしまわないようにしている。 void word_search2(char *txtname) { int i , j , k , l = 0 ; int line[1000] ; //単語出現数は1000回まで char str[LINE_SIZE], word[CMD_SIZE]; printf("検索したい単語を入力して下さい\n"); fgets(word, CMD_SIZE, stdin); //単語のサイズは99まで for(i=1;!feof(txtfile);i++) //1行読み込む毎にiをカウント { fgets(str,LINE_SIZE,txtfile); //まず一行全部読み込む for(j=0;str[j]!='\n';j++) //読み込んだ行の中に単語が含まれていないか探す { if( str[j] == EOF ) break; for(k=j;word[k-j]==str[k];k++) { if(word[k-j+1]=='\n') //含まれていたら { if( j == 0 || str[j-1] == ' ' ) //この2行でそれが単語そのものか判定 if( str[k+1] == ' ' || str[k+1] == '\n' || str[k+1] == EOF ) { line[l] = i ; //その行番号をline[]に入れる l++; } } } } for(k=0;k<j;k++) { str[k] = '\0' ; } } txtfile = freopen(txtname,"r",txtfile); //line[]に入れた行番号からその行を出力する for(i=0;i<l;i++) { if( i == 0 ) { for(j=1;j<=line[0];j++) fgets(str,LINE_SIZE,txtfile); k = line[0]; printf("%d : %s",line[0],str); if( feof(txtfile) ) { printf("\n"); } } else if( line[i] != line[i-1] ) //1行にいくつもある場合はとばす { for(j=k+1;j<=line[i];j++) fgets(str,LINE_SIZE,txtfile); k = line[i]; printf("%d : %s",line[i],str); if( feof(txtfile) ) { printf("\n"); } } } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: