hustoj的测试文件的文件名不支持大写,也不支持“.ans”格式的输出文件,平常上传的时候都是手动改的,直到有一天水哥给我6道题目上传到oj上面,文件名全是大写!所以写个程序批量转化下。
获取文件名以后,使用用命令提示符ren修改文件名即可(调用system函数)。
格式:
ren oldfile.type newfile.type
获取文件名使用的是网上的参考代码:https://www.cnblogs.com/DM-Star/p/8584429.html,还需要单独截出文件名。
代码:
#include<iostream>
#include<io.h>
#include <vector>
#include <cstring>
#include<cstdlib>
#include <string>
#include <algorithm>
using namespace std;
#define MAXPATH 80
void getFiles( string path, vector<string>& files );
int main()
{
vector<string> files;
char buffer[MAXPATH];
getcwd(buffer, MAXPATH);
//cout << buffer << endl;
char * filePath = buffer;
getFiles(filePath, files);
char str[30];
int size = files.size();
for (int i = 0;i < size;i++)
{
string s,t=files[i];
int endIndex;
endIndex=t.rfind("\\");
t=t.substr(endIndex+1); //截取文件名
s=t;
int len=t.size();
len--;
transform(t.begin(),t.end(),t.begin(),::tolower); //大写转小写
if((t[len]=='n'&&t[len-1]=='i')||(t[len]=='t'&&t[len-1]=='u'&&t[len-2]=='o'))
{
s="rename "+s+" "+t;
system(s.c_str());
// cout<<s.c_str()<<endl;
}
else if((t[len]=='s'&&t[len-1]=='n'&&t[len-2]=='a'))
{
t[len]='t';
t[len-1]='u';
t[len-2]='o';
s="rename "+s+" "+t;
system(s.c_str());
// cout<<s.c_str()<<endl;
}
}
cout<<"Done!"<<endl;
system("pause");
return 0;
}
void getFiles( string path, vector<string>& files )
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
getFiles( p.assign(path).append("\\").append(fileinfo.name), files );
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}