用C++编写一款OJ系统
相信OJ对熟悉计算机的朋友来讲都是一个很熟悉的名字,可你有没有想过,自己能不能作一款OJ系统呢?其实很简单。大多数评判机都是linux的,所以我们也在linux上编写这玩意。
整个代码,只需要掌握一个技能:数据重定向。如果你想知道这是什么玩意,那就自己去百度吧。
整个程序的运行效果是这样的:
代码如下:
//The program requires three parameters.Usage:
//./OJ user_program input_file answer
//Example:
//./OJ a.cpp a.in a.out
//Notice:
//You may need to use data redirection to save the result.
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main(int argc,char *argv[])
{
string program_path=argv;
string compile_cmd="g++ -o check_program "+program_path;
system(&compile_cmd);
ifstream check_ce("check_program");
if(!check_ce)
{
cout<<"Compile Error"<<endl;
return 0;
}
ofstream output("user.ans");
output.close();
string check_cmd="./check_program >user.ans <";
check_cmd+=argv;
system(&check_cmd);
ofstream user_md5("usermd5");
user_md5.close();
system("md5sum user.ans >usermd5");
ofstream answer_md5("answermd5");
answer_md5.close();
string verification="md5sum ";
verification+=argv;
verification+=" >answermd5";
system(&verification);
ifstream user_get("usermd5");
string usermd5;
user_get>>usermd5;
ifstream ans_get("answermd5");
string ansmd5;
ans_get>>ansmd5;
if(usermd5==ansmd5)
{
cout<<"Accepted"<<endl;
}
else
{
cout<<"Wrong Answer"<<endl;
}
system("rm check_program");
system("rm answermd5");
system("rm user.ans");
system("rm usermd5");
return 0;
}
制作不易,给个评分吧~~~
这个肯定不能算作是online judge的,只能算作是代码验证正误的一个脚本,而且还只能离线运行,和真正的oj差了十万八千里了 coolcalf 发表于 2022-8-28 13:11
QJ 是什么意思,抢劫?
OJ可以判断你的程序是否存在逻辑错误或语法错误 连半成品都不算
啊这,好家伙 谢谢分享! 加油阿,给力 Qiang Jie ? coolcalf 发表于 2022-8-27 13:49
Qiang Jie ?
您这句话是什么意思?我不太理解。
hanbangze 发表于 2022-8-27 17:06
您这句话是什么意思?我不太理解。
QJ 是什么意思,抢劫? 大神都是真没朴实无华吗?
页:
[1]
2