C语言单词正确性检查程序

问题描述: 已知有一个正确单词索引表(保存在当前目录下的文件'index.txt'中,且全为小写字母,按照字典序由小到大排列,每个单词独占一行),编写程序利用该单词表对某一英文文章(保存在当前目录下的另一个文件'in.txt'中)进行单词正确性检查。若该英文文章中出现的单词(只有连续字母组成)没有出现在单词索引文件中(检查时大小写无关),则将该出错的单词(其中的字母全部转换为小写)输出到当前目录下的另一文件'error.txt'中,每个单词独占一行,并且以字典序由小到大的顺序输出。

假设:

  1. 'in.txt'中的文章有可能没有经过排版,格式有可能杂乱无章,也有可能没有写完整。
  2. 'index.txt'中的单词个数不超过1000个,每个单词的长度不超过50个字母。
  3. 若出错的单词多次出现,则多次输出。

输入形式:

保存单词索引表的文件'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;
}

程序说明:

  1. 程序首先打开单词索引文件'index.txt'和英文文章文件'in.txt'。
  2. 将'index.txt'中的所有单词读取到一个set中,以便快速查找。
  3. 逐行读取'in.txt'中的英文文章,并逐字符提取出单词。
  4. 将提取的单词转换为小写,并查找它是否在单词索引set中。
  5. 若单词不在索引表中,则将其输出到'error.txt'文件中。
  6. 重复以上步骤,直到处理完所有行。
  7. 最后关闭所有文件。

注意: 该程序假设英文文章中的所有单词都是由连续字母组成,并且不包含任何非字母字符。若文章中包含其他字符,则需要进行相应的处理。


原文地址: https://www.cveoy.top/t/topic/glV5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录