c++ builder 比较文本文件内容是否相同

//有需要比较两个文本文件内容是否相同的情况,比如参数等,方法:逐行比较

 #include <vcl.h>
#include <fstream>
#include <iostream>
using namespace std;

bool FileCompare(String file1,String file2,String outfile)//比较函数,如果不同,输出到outfile
{

 

    char buffer[2000]={0};char buffer2[2000]={0};//每行都读到字符串数组,
    int LineMaxlen=1900;
    int i=0;
    bool IsSame[5000]={false};//是否相同的数组,最多5000行
    bool SameTemp=true;//最终比较结果
    ifstream f1(file1.c_str());
    ifstream f2(file2.c_str());

    if (f1.is_open() && f2.is_open())//条件:两个文件都打开
    {
         ofstream f3(outfile.c_str());
         bool IsOpen=f3.is_open();
         bool firstTime=false;
        while (!f1.eof() ||!f2.eof() )//退出while循环条件:读到末尾
        {   f1.getline (buffer,LineMaxlen);//读第1个文件的一行到buffer
            f2.getline (buffer2,LineMaxlen);//读第2个文件的一行到buffer2
            //cout <<i<<"1,"<<"len="<<strlen(buffer)<<","<< buffer << endl;
            //cout <<i<<"2,"<<"len="<<strlen(buffer2)<<","<< buffer2 << endl;
            IsSame[i]=(*buffer==*buffer2);//比较两个文件的每一行,比较结果放到数组
            //cout<<i<<","<<IsSame[i]<<endl;
            SameTemp=SameTemp&&IsSame[i];//

            if (IsOpen && !IsSame[i])
            {
              if (!firstTime)
              {
                 TDateTime dt=Now();
                 unsigned short year,month,day;
                 unsigned short hour,min,sec,msec;
                 dt.DecodeDate(&year,&month,&day);
                 dt.DecodeTime(&hour, &min,&sec, &msec);
                 f3<<year<<"."<<month<<"."<<day<<" "<<hour<<":"<<min<<":"<<sec<<"修改参数"<<endl;
                 firstTime=true;
              }
              f3 <<"line"<<i+1<<"不同"<<endl;
              f3 <<"file1:"<<buffer<<endl;
              f3 <<"file2:"<<buffer2<<endl;
              sprintf(buffer,"%s","");
              sprintf(buffer2,"%s","");
            }
              i++;
            //if (i>5000) break;
        }
        f1.close();
        f2.close();
        f3.close();
        //cout<<SameTemp;
    }
    return SameTemp;
}

int main(int argc, char* argv[])//c++  builder 6.0
//int _tmain(int argc, _TCHAR* argv[])//c++  builder 10.3

{  
     cout<<FileCompare("d:\\test111\\test333.txt",
                "d:\\test333.txt","d:\\output.txt")<<endl;
    system("pause");
    return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新试题库,能够正确抽取试题和判卷,并给出成绩。 以下是一个可能的实现方案: 1. 创建一个名为 test.txt 的文本文件,用记事本打开。 2. 在文件中写入 40 道单选题和相应的选项和正确答案,每道题占一行,格式如下: 题目:这是一道单选题吗? A. 是 B. 不是 C. 可能是 D. 不确定 答案:A 3. 创建一个 Python 程序,用于实现试题库管理和考试系统功能。可以分为以下几个部分: - 试题库管理部分:该部分包括试题录入、修改和删除功能。可以使用文件读写操作实现。例如,读取 test.txt 文件中的所有试题信息,存储到一个列表中。此后,用户可以选择添加、修改或删除试题,并将结果写回文件中。 - 试题抽取部分:该部分需要从试题库中随机抽取 N 道试题,N 由用户输入。可以使用 random 模块实现随机抽取。 - 考生答题部分:该部分需要从试题库中抽取 N 道试题,并让用户输入答案。可以使用 input 函数实现用户输入,将用户输入的答案存储到一个列表中。 - 自动判卷部分:该部分需要将用户输入的答案与标准答案进行对比,给出成绩。可以遍历用户输入的答案和标准答案,将每道题的得分累加起来,并输出总得分。 下面是一个简单的实现示例: ```python import random def read_questions(filename): """从文件中读取试题信息""" questions = [] with open(filename, 'r') as f: question = {} for line in f: line = line.strip() if line.startswith('题目:'): question['题目'] = line[3:] elif line.startswith('A. '): question['A'] = line[3:] elif line.startswith('B. '): question['B'] = line[3:] elif line.startswith('C. '): question['C'] = line[3:] elif line.startswith('D. '): question['D'] = line[3:] elif line.startswith('答案:'): question['答案'] = line[3:] questions.append(question) question = {} return questions def write_questions(filename, questions): """将试题信息写入文件""" with open(filename, 'w') as f: for question in questions: f.write('题目:%s\n' % question['题目']) f.write('A. %s\n' % question['A']) f.write('B. %s\n' % question['B']) f.write('C. %s\n' % question['C']) f.write('D. %s\n' % question['D']) f.write('答案:%s\n' % question['答案']) def add_question(questions): """添加试题""" question = {} question['题目'] = input('请输入新题目:') question['A'] = input('请输入选项A:') question['B'] = input('请输入选项B:') question['C'] = input('请输入选项C:') question['D'] = input('请输入选项D:') question['答案'] = input('请输入正确答案:') questions.append(question) print('添加成功!') def edit_question(questions): """修改试题""" index = int(input('请输入要修改的试题编号(从1开始):')) - 1 question = questions[index] print('当前题目:%s' % question['题目']) question['题目'] = input('请输入新题目(留空表示不修改):') or question['题目'] question['A'] = input('请输入选项A(留空表示不修改):') or question['A'] question['B'] = input('请输入选项B(留空表示不修改):') or question['B'] question['C'] = input('请输入选项C(留空表示不修改):') or question['C'] question['D'] = input('请输入选项D(留空表示不修改):') or question['D'] question['答案'] = input('请输入正确答案(留空表示不修改):') or question['答案'] print('修改成功!') def delete_question(questions): """删除试题""" index = int(input('请输入要删除的试题编号(从1开始):')) - 1 question = questions[index] print('确认删除以下试题吗?') print('题目:%s' % question['题目']) print('A. %s' % question['A']) print('B. %s' % question['B']) print('C. %s' % question['C']) print('D. %s' % question['D']) print('答案:%s' % question['答案']) confirm = input('确认删除吗?(y/n)') if confirm.lower() == 'y': questions.pop(index) print('删除成功!') def choose_questions(questions, num): """从试题库中随机抽取N道试题""" return random.sample(questions, num) def take_exam(questions): """考试""" num = int(input('请输入要抽取的试题数量:')) chosen_questions = choose_questions(questions, num) answers = [] for i, question in enumerate(chosen_questions): print('第%d题:%s' % (i+1, question['题目'])) print('A. %s' % question['A']) print('B. %s' % question['B']) print('C. %s' % question['C']) print('D. %s' % question['D']) answer = input('请输入答案:') answers.append(answer) return chosen_questions, answers def grade_exam(chosen_questions, answers): """判卷并计算得分""" score = 0 for i, question in enumerate(chosen_questions): if answers[i] == question['答案']: score += 1 return score def main(): """主函数""" filename = 'test.txt' questions = read_questions(filename) while True: print('请选择操作:') print('1. 添加试题') print('2. 修改试题') print('3. 删除试题') print('4. 抽取试题') print('5. 考试') print('6. 退出') choice = input('请输入操作编号:') if choice == '1': add_question(questions) write_questions(filename, questions) elif choice == '2': edit_question(questions) write_questions(filename, questions) elif choice == '3': delete_question(questions) write_questions(filename, questions) elif choice == '4': num = int(input('请输入要抽取的试题数量:')) chosen_questions = choose_questions(questions, num) for question in chosen_questions: print('题目:%s' % question['题目']) print('A. %s' % question['A']) print('B. %s' % question['B']) print('C. %s' % question['C']) print('D. %s' % question['D']) print('答案:%s' % question['答案']) elif choice == '5': chosen_questions, answers = take_exam(questions) score = grade_exam(chosen_questions, answers) print('得分:%d/%d' % (score, len(chosen_questions))) elif choice == '6': break else: print('无效的操作!') if __name__ == '__main__': main() ``` 该程序实现了试题库的管理和考试功能。用户可以通过菜单选择添加、修改或删除试题,也可以抽取试题进行预览。在考试功能中,程序会随机抽取一定数量的试题,让用户输入答案,并给出得分。注意,该程序没有实现用户登录和保存考试记录的功能,需要根据实际需求进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值