C语言单词正确性检查程序 - 利用单词索引表检测英文文章
C语言单词正确性检查程序
问题描述: 已知有一个正确单词索引表(保存在当前目录下的文件'index.txt'中,且全为小写字母,按照字典序由小到大排列,每个单词独占一行),编写程序利用该单词表对某一英文文章(保存在当前目录下的另一个文件'in.txt'中)进行单词正确性检查。若该英文文章中出现的单词(只有连续字母组成)没有出现在单词索引文件中(检查时大小写无关),则将该出错的单词(其中的字母全部转换为小写)输出到当前目录下的另一文件'error.txt'中,每个单词独占一行,并且以字典序由小到大的顺序输出。
假设:
- 'in.txt'中的文章有可能没有经过排版,格式有可能杂乱无章,也有可能没有写完整。
- 'index.txt'中的单词个数不超过1000个,每个单词的长度不超过50个字母。
- 若出错的单词多次出现,则多次输出。
输入形式:
保存单词索引表的文件'index.txt'和保存英文文章的文件'in.txt'都位于当前目录下。
输出形式:
将出错的单词以字典序由小到大的顺序输出到当前目录下的文件'error.txt'中,每个单词单独占一行,多次出错的单词多次输出。若没有出现错误单词,则什么也不输出。
C++代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <cctype>
using namespace std;
int main() {
// 打开单词索引文件
ifstream indexFile("index.txt");
if (!indexFile.is_open()) {
cerr << "Error opening index.txt" << endl;
return 1;
}
// 读取单词索引到set中
set<string> words;
string word;
while (getline(indexFile, word)) {
words.insert(word);
}
indexFile.close();
// 打开英文文章文件
ifstream inFile("in.txt");
if (!inFile.is_open()) {
cerr << "Error opening in.txt" << endl;
return 1;
}
// 打开错误输出文件
ofstream errorFile("error.txt");
if (!errorFile.is_open()) {
cerr << "Error opening error.txt" << endl;
return 1;
}
// 逐行读取英文文章
string line;
while (getline(inFile, line)) {
// 将行中的单词提取出来
string currentWord;
for (char c : line) {
if (isalpha(c)) {
currentWord += tolower(c); // 将字母转换为小写
} else if (!currentWord.empty()) {
// 当前单词读取完毕
if (words.find(currentWord) == words.end()) {
// 单词不在索引表中,输出到错误文件
errorFile << currentWord << endl;
}
currentWord.clear(); // 清空当前单词
}
}
if (!currentWord.empty()) {
// 处理最后剩余的单词
if (words.find(currentWord) == words.end()) {
errorFile << currentWord << endl;
}
}
}
inFile.close();
errorFile.close();
return 0;
}
程序说明:
- 程序首先打开单词索引文件'index.txt'和英文文章文件'in.txt'。
- 将'index.txt'中的所有单词读取到一个set中,以便快速查找。
- 逐行读取'in.txt'中的英文文章,并逐字符提取出单词。
- 将提取的单词转换为小写,并查找它是否在单词索引set中。
- 若单词不在索引表中,则将其输出到'error.txt'文件中。
- 重复以上步骤,直到处理完所有行。
- 最后关闭所有文件。
注意: 该程序假设英文文章中的所有单词都是由连续字母组成,并且不包含任何非字母字符。若文章中包含其他字符,则需要进行相应的处理。
原文地址: https://www.cveoy.top/t/topic/glV5 著作权归作者所有。请勿转载和采集!