Windows下比較兩個文件的不同(命令行操作/相關軟件)

寫在前面

做ACM題目的時候,往往要比較程序輸出與樣例輸出,以確保程序正確性。當樣測試樣例比較少的時候,直接人工比對就可以了,但當測試數據比較大(上百或更多)的時候,人工檢查就容易出錯了。

假設現有兩個測試文件1381.in和1381.ans,其中1381.in是程序輸入文件,1381.ans程序輸入對應的正確答案的輸出。假設我們將自己編寫的程序重定向輸出到1381.out文件。那麼我們就需要比對1381.ans和1381.out兩個文件。只有當兩個文件每一行均相等的時候,才說明程序通過了該測試用例。

文件重定向

方法一:在源碼中重定向

重定向輸入輸出流有兩種方法。一種是在源碼中添加如下代碼

freopen("1381.in", "r", stdin);
freopen("1381.out", "w", stdout);

freopen是定義在C的stdio頭文件中,因此需要添加頭文件#include <stdio.h>。

而在C++中,則需要需要添加頭文件#include <cstdio>才能使用freopen函數。

方法二:命令行方式

另一種方法是在命令行窗口(Dos)下運行程序,如下圖所示:


注:

1,其中第一個爲要執行的命令。 <表示重定向輸入流,其右方的1381.in爲輸入文件。>表示重定向輸出流,右方的1381.out表示輸出的內容將要存放的文件名。

2,可在程序所在文件夾內空白處按住shift鍵,然後鼠標右擊,點擊“在此處打開命令行窗口”,再輸入上圖所示命令即可。

文件比對

方法一:寫程序判斷

生成好1381.out文件之後,接下來的工作就是進行文件比對了。其實文件的比對邏輯是很簡單的,無非就是同時從兩個文件中讀取一行字符串,然後比較字符串是否相同。若不相同,則將其輸出。所以自己動手寫程序判斷就是了。上圖中的differ.py是一個Python腳本程序,要運行該腳本,需安裝Python3.0以上版本的Python解釋器。當然,也可以自己用C/C++編寫程序校驗。differ.py代碼如下:

name = input("輸入文件名\n")

with open(str(name) + ".ans", "r") as stan:
    with open(str(name) + ".out", "r") as f:
        for s, t in zip(stan, f):
            s = s.rstrip()
            t = t.rstrip()
            if s != t:
                print()
                print("答案:", s)
                print("程序:", t)
                print()
print("down!")

命令行窗口運行效果如下:


程序顯示1381.ans中值爲81的行與1381.out中對應行的不相同。也就是說,答案是81,但是程序處理得到的錯誤結果爲90。

方法二:文件比較命令fc

事實上,在Windows中內置瞭如上功能的文件比較命令fc,只需如下圖所示使用即可:


需要特別注意的是,在某些機器上,執行上述命令的時候,會出現“fc 不是內部或外部命令.....”這樣的提示,這是沒有配置好“環境變量的”緣故。具體操作方法,可自行搜索。對於64位Win7系統,可參考:http://bbs.pcbeta.com/viewthread-869777-1-1.html。如果按鏈接所示配置之後依然出現提示,可嘗試重啓機器。

方法三:使用軟件來比對文件

最後,我們可以使用軟件來比對文件。這裏推薦Beyond Compare,下載地址可自行搜索。如下是程序運行截圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章