#include<iostream>
#include<stdio.h>
#include<vector>
#include<fstream>
#include<string>
#include<ctype.h>
using namespace std;
class FileNotOpen //文件无法打开异常类
{
public:
string what()
{
string str="文件无法打开,没有此文件或目录!";
return str;
}
};
class Convert //转换类
{
private:
void ToCapital(string& str); //将字符串转变为大写
void ToLowcase(string& str); //将字符串转变为小写
void ReadFile(const string& filename,vector<string>& tmp);//将文件内容读入到向量tmp中
void WriteFile(const string& filename,vector<string>& tmp); 将向量tmp内容写入文件中
public:
void LowcaseToCapitalOfFile(const string& filename); //将文件中小写字母转变为大写字母
void CapitalToLowcaseOfFile(const string& filename); //将文件中大写字母转变为小写字母
double StringToDouble(const string& str); //将字符串转变为双精度浮点数
//可以增加其他许多转换方法
};
void Convert::ToCapital(string& str)
{
string::iterator it;
for(it=str.begin();it!=str.end();it++)
{
*it=toupper(*it);
}
}
void Convert::ToLowcase(string& str)
{
string::iterator it;
for(it=str.begin();it!=str.end();it++)
{
*it=tolower(*it);
}
}
void Convert::ReadFile(const string& filename,vector<string>& tmp)
{
ifstream infile; //定义输入流文件
try
{
infile.open(filename.c_str(),ios::in); //以读方式打开此文件
if(!infile) throw FileNotOpen();
}
catch(FileNotOpen& e)
{
cerr<<e.what()<<endl;
exit(-1);
}
catch(...)
{
cerr<<"Something unexpected!"<<endl;
}
string s;
while(getline(infile,s)) tmp.push_back(s); //将文件内容读入到向量tmp中
infile.clear(); //清除文件流
infile.close(); //关闭文件
}
void Convert::WriteFile(const string& filename,vector<string>& tmp)
{
ofstream outfile; //定义输出文件流
try
{
outfile.open(filename.c_str(),ios::out); //以写方式打开此文件
if(!outfile) throw FileNotOpen();
}
catch(FileNotOpen& e)
{
cerr<<e.what()<<endl;
exit(-1);
}
catch(...)
{
cerr<<"Something unexpected!"<<endl;
}
vector<string>::iterator it;
for(it=tmp.begin();it!=tmp.end();it++) outfile<<(*it)<<endl;
outfile.clear();
outfile.close();
}
void Convert::LowcaseToCapitalOfFile(const string &filename)
{
vector<string> tmp;
this->ReadFile(filename,tmp);
vector<string>::iterator it;
for(it=tmp.begin();it!=tmp.end();it++)
{
this->ToCapital(*it);
}
this->WriteFile(filename,tmp);
}
void Convert::CapitalToLowcaseOfFile(const string &filename)
{
vector<string> tmp;
this->ReadFile(filename,tmp);
vector<string>::iterator it;
for(it=tmp.begin();it!=tmp.end();it++)
{
this->ToLowcase(*it);
}
this->WriteFile(filename,tmp);
}
void main()
{
string filename;
cout<<"请输入文件名:";
getline(cin,filename);
Convert c;
//c.CapitalToLowcaseOfFile(filename);
c.LowcaseToCapitalOfFile(filename);
}