mac os 程序对拍(同Linux对拍) 以及c++文件读入

mac os 程序对拍(同Linux对拍) 以及c++文件读入

在网上翻了好久发现Windows和Linux下的程序对拍都有很多博客, 而macos下的寥寥无几, 自己摸索了一下发现macos和Linux基本相同。

准备:
test1.cpp //算法程序1
test2.cpp //算法程序2
data.cpp //数据生成器
compare.cpp //比较程序

前三个cpp大家肯定都知道怎么写, 最主要的是如何自动compare, 并且直观, 方便我们查错。

compare程序:

/********************************************
 *Author*        :ZZZZone
 *Created Time*  : 日 11/19 18:10:24 2017

*********************************************/

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <fstream>
#include <cassert>
#include <string>
using namespace std;
typedef pair<int, int> PII;
typedef long long LL;
typedef unsigned long long ULL;

void readData(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    string s;
    while(getline(infile,s))
    {
        cout<<s<<endl;
    }
    infile.close();             //关闭文件输入流 
}

void readans(string file1, string file2){
    ifstream infile1, infile2;
    infile1.open(file1.data());
    infile2.open(file2.data());
    assert(infile1.is_open());    
    assert(infile2.is_open());    
    string s1, s2;
    while(getline(infile1, s1) && getline(infile2, s2)){
        bool flag = false;
        if(s1 != s2) flag = true;
        if(flag) printf("------------------\n");
        cout << s1 <<  " | " <<s2 << endl;
        if(flag) printf("------------------\n");
    }
    infile1.close();
    infile2.close();
}

int main(){
  for (int i=1;;i++){
        printf("The result of No. %d Case is:  ",i);
        system("/Users/zong/代码/vimcode/data");//程序路径
        system("/Users/zong/代码/vimcode/std");
        system("/Users/zong/代码/vimcode/test");
        if (system("diff std.out test.out")){
            printf("Wrong Answer\n");
            printf("\n"); 
            readData("/Users/zong/代码/vimcode/data.in");
            //直接输出数据和答案, 方便比较
            readans("/Users/zong/代码/vimcode/std.out", "/Users/zong/代码/vimcode/test.out");
            //同步输出两组数据, 方便对比查看。
            return 0;
        }
        else printf("Accepted\n");
    }
    return 0;
}

通常默认保存路径为 ./ 也就是ubuntu和macos的home下, 但是我用macvim直接编译系统无法识别./,用终端运行反而可以, 因为我平时都是用gui的macvim, 很少用终端, 所以我直接把路径写全了,把./展开为/Users/zong(用户名)/再后面就是具体cpp保存路径了。

附上各种文件读入:

所需头文件:

#include <iostream>
#include <fstream>
#include <cassert>
#include <string>
  1. 逐行读入
void readTxt(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    string s;
    while(getline(infile,s))
    {
        cout<<s<<endl;
    }
    infile.close();             //关闭文件输入流 
}
  1. 逐个字符读入(忽略空格与回车)
void readTxt(string file)
    ifstream infile; 
    infile.open(file.data()); //将文件流对象与文件连接起来 
    assert(infile.is_open());  //若失败,则输出错误消息,并终止程序运行 
    char c;
    while (!infile.eof())
    {
        infile >> c;
        cout<<c<<endl;

    }
    infile.close();             //关闭文件输入流 
}
  1. 逐个字符读入(包括空格与回车)
void readTxt(string file)
{
    ifstream infile; 
    infile.open(file.data());   //将文件流对象与文件连接起来 
    assert(infile.is_open());   //若失败,则输出错误消息,并终止程序运行 

    char c;
    infile >> noskipws;
    while (!infile.eof())
    {
        infile>>c;
        cout<<c<<endl;

    }
    infile.close();             //关闭文件输入流 
}

猜你喜欢

转载自blog.csdn.net/zzzzone/article/details/78581316