C語言---單詞檢查
已知有一個正確單詞索引表(儲存在當前目錄下的檔案index.txt中,且全為小寫字母,按照字典序由小到大排列,每個單詞獨佔一行),編寫程式利用該單詞表對某一英文文章(儲存在當前目錄下的另一個檔案in.txt中)進行單詞正確性檢查,若該英文文章中出現的單詞(只有連續字母組成)沒有出現在單詞索引檔案中(檢查時大小寫無關),則將該出錯的單詞(其中的字母全部轉換為小寫)輸出到當前目錄下的另一檔案error.txt中,每個單詞獨佔一行,並且以字典序由小到大的順序輸出。
假設:
1、in.txt中的文章有可能沒有經過排版,格式有可能雜亂無章,也有可能沒有寫完整。
2、index.txt中的單詞個數不超過1000個,每個單詞的長度不超過50個字母。
3、若出錯的單詞多次出現,則多次輸出。
【輸入形式】
儲存單詞索引表的檔案index.txt和儲存英文文章的檔案in.txt都位於當前目錄下。
【輸出形式】
將出錯的單詞以字典序由小到大的順序輸出到當前目錄下的檔案error.txt中,每個單詞單獨佔一行,多次出錯的單詞多次輸出。若沒有出現錯誤單詞,則什麼也不輸出。
【樣例輸入1】
假設檔案in.txt內容為:
There are two verrsions of the international standards for C.
Thee first version was ratified in 1989 by the American National
Standards Institue (ANS1) C standard committee.It is often
referred as ANS1 C or C89. The secand C standard was completed
in 1999. This standard is comonly referred to as C99. C99 is a
milestone in C’s evolution into a viable programing languga
for numerical and scientific computing.
檔案index.txt中的單詞索引表內容為:
a
american
and
ansi
are
as
by
c
committee
commonly
completed
computing
evolution
first
for
in
institue
international
into
is
it
language
milestone
national
numerical
of
often
or
programming
ratified
referred
s
scientific
secand
standard
standards
the
there
this
to
two
version
versions
viable
was
【樣例輸出1】
檔案error.txt中出錯的單詞應為:
ans
ans
comonly
languga
programing
thee
verrsions
【樣例1說明】
用index.txt中的單詞索引表對in.txt中出現的每一個單詞進行檢查,檢查時大小寫無關,所以第一個單詞There出現在索引表中,不是錯誤單詞;單詞verrsions沒有出現在索引表中,拼寫錯誤,所以作為出錯單詞輸出;單詞ANSI拼寫成了ANS1,將其中字母都轉換為小寫後輸出,並且多次出現,多次輸出;其他出錯單詞類似。錯誤單詞輸出按照字典序由小到大輸出到error.txt檔案中。
【樣例輸入2】
假設檔案in.txt內容為:
There are two versions of the international standard fo
檔案index.txt中的單詞索引表內容為:
are
for
international
of
standards
the
there
two
versions
【樣例輸出2】
檔案error.txt中出錯的單詞應為:
fo
standard
【樣例2說明】
檔案in.txt中的單詞standard沒有出現在索引表文件index.txt中,所以作為錯誤單詞輸出。
注意:樣例2中in.txt檔案內容還不完整,最後的單詞fo後沒有任何字元,fo也沒有出現在索引表中,所以也作為錯誤單詞輸出。
【評分標準】本題要求對文章的單詞進行檢查,提交程式檔名為words.c或words.cpp。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
FILE *f, *g,*h;
char word[20], c, tmp[20];
char words[100][20],tr[100][20],err[100][20];
int i, j = 0, k = 0,m=0;
f = fopen("in.txt", "r");
h = fopen("index.txt", "r");
g = fopen("error.txt", "w");
while (!feof(f)) {
fscanf(f, "%s", words[k++]);
}
rewind(f);
while (!feof(h)) {
fscanf(h, "%s", tr[m++]);
}
rewind(h);
for (i = 0; i < k; i++) {
for (j = 0; j < strlen(words[i]); j++) {
c = words[i][j];
if ((c <= 'z'&&c >= 'a') || (c <= 'Z'&&c >= 'A')) {
if ((c <= 'Z'&&c >= 'A')) {
c += 32;
}
words[i][j] = c;
}
else if (c == '\'') {
int a = j, t = 0;
while (words[i][a++] != ' ') {
words[k][t++] = words[i][a];
}
k++;
}
else {
words[i][j] = '\0';
}
}
}
int flag = 0,tp=0;
for (i = 0; i < k; i++) {
if ((words[i][0] == '\0')) {
continue;
}
for (j = 0; j < m; j++) {
if (strcmp(words[i], tr[j]) == 0) {
flag = 1;
}
}
if (!flag) {
strcpy(err[tp++] , words[i]);
}
flag = 0;
}
for (i = 0; i < tp; i++) {
for (j = i + 1; j < tp; j++) {
if (strcmp(err[i], err[j]) > 0) {
strcpy(word, err[i]);
strcpy(err[i], err[j]);
strcpy(err[j], word);
}
}
fprintf(g, "%s\n", err[i]);
}
fclose(f);
fclose(g);
fclose(h);
return 0;
}