国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

對C++語言中dos命令的調用及system()函數使用方法的探究

2019-11-08 01:15:02
字體:
來源:轉載
供稿:網友

C++ system()函數的使用方法探究


本篇文章實際是一篇休閑娛樂文章,大家有興趣可以考慮如下問題(可以當做OJ題):

問題

你現在手頭有一份個人代碼,它十分詭異怎么也不能AC,于是你找來了一份std(標程),用它來進行對拍。當然,你很牛B,幾下就把對拍的bat(批處理)文件寫出來了。這時你發現dos中的fc比較一直顯示無差異,但你并不知道它都測了些什么(即你不知道輸入文件,因為它是隨機生成的)。于是,你決定想辦法把所有測試數據連同你自己與標程的輸出整理到形如“dataxxx”的文件夾中。由于測試數據很多,靠人力根本不可能完成這個任務。聰明的你一定能想出解決的辦法!

輸入

無輸入

輸出

無輸出

題目說明

最好結合實際經歷,編寫一份C++程序,它可以控制隨機數據的生成,還可以用這份數據進行測試,最后將它自己的測試文件連同兩個輸出文件按順序整理到文件夾(子目錄)“dataxxx”中,如“data1”,“data23”中??梢允褂胒reopen(),system()等函數,它們都在庫 < cstdlib >之中。

來源

當然,這題是我現場想的,就是生活中的一個實際應用。比如本人在OJ上做題時,有時會莫名其妙地被卡(就是明明對了卻就是不讓我過,哼),我對拍時閑得無聊想看它都測了啥,于是我就寫出了一份控制程序。

下面貼上一份代碼,因為我太弱了,所以比較時采用的是文件按位比較,且沒比較長度。我對于輸出“dataxxx”的解決方法是先寫好dos命令的前半部分,然后在后面將數字拼接上(使用< cstring >庫中的strcat()和strcpy()),細節可參考代碼

代碼

#include<ctime>#include<cstdio>#include<cstdlib>#include<cstring>#define maxn 505using namespace std;char cmp[maxn];int cnt=0;char cmd[maxn];int con=0;char s1[maxn]="md .//data";//斜線要打成雙斜線char s2[maxn]="copy data.in .//data";char s3[maxn]="copy my.out .//data";char s4[maxn]="copy std.out .//data";char l1[maxn]="md .//data";char l2[maxn]="copy data.in .//data";char l3[maxn]="copy my.out .//data";char l4[maxn]="copy std.out .//data";//字符串的大小要夠,否則會導致字符串拼接不成功,而且三個文件需要分開copy,否則會被強大地合并為一個文件,有興趣可以自己試一試char c1[2];void EXE(){ strcpy(l1,s1); strcpy(l2,s2); strcpy(l3,s3); strcpy(l4,s4);//將原模板復制到l1,l2,l3,l4中以備后續使用 int k[10]; int m=con; int size=0; while(m>0){ k[size++]=m%10; m=m/10; } for(int i=size-1;i>=0;i--){ c1[0]=k[i]+'0'; strcat(l1,c1); strcat(l2,c1); strcat(l3,c1); strcat(l4,c1);//字符串拼接 } system(l1); system(l2); system(l3); system(l4);//執行上面的l1,l2,l3,l4命令,先創建目錄,再把三份數據分別復制到指定地點 return;}bool Judge(){ cnt=0; fclose(stdout); int a=system("cd /d F://Someplace");//將當前路徑引到當前代碼的所在位置 int b=system("Test.exe < data.in > std.out"); int c=system("code2.exe < data.in > my.out");//這兩句用于輸入測試數據,取得輸出文件 freopen("std.out","r",stdin); while(scanf("%c",&cmp[cnt++])==1); freopen("my.out","r",stdin); int i=0;char ch; while(scanf("%c",&ch)==1){ if(ch!=cmp[i++]){ EXE(); return false; } } EXE(); return true;}int main(){ freopen("data.in","w",stdout); srand(time(NULL)); int A,B; do{ freopen("data.in","w",stdout);//各種重定向 do{ A=rand()%2000000000+1; B=rand()%2000000000+1; }while(A>B); 這份代碼兼職生成測試數據,其中Test.cpp為標程,code2.cpp為個人代碼(不要問我名字為什么這么怪),同時字符串內的“/”要打成“/”才對。程序可以加以改動,直接運行即可(可能速度稍微慢一些,一分鐘只能生成1000+個文件夾)

總結

當然本人也是非常的弱啦,肯定會有一堆dos大神或linux終端大神在默默地bs我。。。歡迎各位留言,評論,共同交流O(∩_∩)O~ 。哦,對了,下面貼上效果圖(上面指定了con大小不超過100)

這里寫圖片描述

你看它們的修改日期都一樣。。。

這里寫圖片描述

每個文件夾里面都是這三個文件,當然大小和內容都不相同:

這里寫圖片描述

我不禁想說:編程改變命運


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 高尔夫| 固始县| 墨竹工卡县| 旬邑县| 元谋县| 师宗县| 望谟县| 瓮安县| 朔州市| 苍山县| 宣城市| 临沂市| 嵊州市| 鹿泉市| 北宁市| 广东省| 五台县| 时尚| 东乌珠穆沁旗| 濮阳县| 新竹市| 东兰县| 霍城县| 左贡县| 辽阳县| 康保县| 锡林浩特市| 白水县| 岢岚县| 施甸县| 永康市| 富宁县| 大理市| 黑龙江省| 佛冈县| 项城市| 青河县| 丰县| 全椒县| 靖远县| 建平县|