将文件中内容进行大小写转化

来源:互联网 发布:淘宝客采集程序源码 编辑:程序博客网 时间:2024/04/28 12:18

#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);
}

原创粉丝点击