|
ファイルから1行読み込み検索対象の単語があればその行をファイルに出力するプログラムを作成してます。
ファイルの構成はすべてシフトJISの全角になっています。
特定の単語で検索を行うとファイル内には無い文字がヒットされることがあります。
「燕」で検索を行ったら燕が無いのにかかわらず表示されてしまいます。
燕の文字コードが「898d」だから、検索対象の文字の2バイト目と次に来る1バイト目で検索に引っかかるのでしょうか?
それを考えて文字を進めるところをいじってもみたのですがどうにもなりませんでした^^;
よろしければアドバイスをお願いします。
char strtxt[80], wan[80];
int wp,tp,i;
/*ファイルの読み込み*/
while((fgets(strtxt,TXTLEN,fp_in)) != NULL){
/*ファイルと単語のポインタの初期化*/
wp=0;tp=0;
/*単語が見つかるかテキストに単語が見つからなかったら終了*/
while((wan[wp] != '\0') && (strtxt[tp]) != '\0'){
/*検索単語のと読み込んだファイルが一致しているかどうか*/
if(wan[wp] == strtxt[tp]){
/*見つかったらポインタを1つ進める*/
wp++;
tp++;
}else{
/*見つからなかったら単語ポインタを最初に戻し、テキストポインタを1つ進める*/
tp = tp - wp +1;
wp = 0;
}
}
/*単語が見つかっていたらその行をファイルに出力*/
if(wan[wp] == '\0'){
fprintf(fp_out"%s",strtxt);
}
}
}
処理的にはstrstr()と同じ処理をさせているつもりです。
ためしにstrstr()を使って書き直しましたが同じ現象がでます。
|