写了 windows RC 资源多语言string 替换的程序,发出来看下。

来源:互联网 发布:php基本语法 编辑:程序博客网 时间:2024/06/11 03:49
#include <iostream>#include <string>#include <vector>#include <sstream>#include <cstring>#include <fstream>      // std::ifstream#include <map>#include <iostream>     // std::cout#include <fstream>      // std::ifstreamusing namespace std;vector< string > readfile1( char * pcFilename);char  *delete_space(char src[]);map< string ,string> VectorToMap( vector< string > a );void SplitString(const string& s, vector<string>& vStore, const string& c);map< string, string > changTheValue( map< string, string > mapEnglishRC, map< string, string > mapOtherRC);void writeFile( string sInputFileName, string sOutputFilename, map< string, string> mapChange );void StringToFirstStringSecondString(string inputString, string &firstString, string &secondString);int  main(int   argc,   char*   argv[]){    vector< string > vEnglistStr;    vector< string > vOtherStr;    map< string, string > mapEnglishRC;    map< string, string > mapOtherRC;    //vEnglistStr = readfile1("en.txt");    //vOtherStr = readfile1("rus.txt");    vEnglistStr = readfile1(argv[1]);    vOtherStr = readfile1(argv[2]);    mapEnglishRC = VectorToMap( vEnglistStr );    mapOtherRC = VectorToMap( vOtherStr );    mapEnglishRC = changTheValue( mapEnglishRC, mapOtherRC );    //writeFile( "en.txt", "output.txt", mapEnglishRC );    writeFile( argv[1], argv[3], mapEnglishRC );    cout << "Hello world!" << endl;    return 0;}vector<string> readfile1( char * pcFilename){    ifstream in(pcFilename);string line;string strInputLine ;vector< string> vec_store_line;bool bFlag =false;if(in) // 有该文件{while (getline (in, line)) // line中不包括每行的换行符{    if(line.size() == 0)                continue;    char *pcInputLine = delete_space( const_cast<char*> ((line.c_str() )));    string strInputLine = string( pcInputLine );    if (strInputLine == "STRINGTABLE")    {        bFlag = true;        continue;    }            if (strInputLine == "BEGIN")                continue;            if (strInputLine == "END")                continue;            if (bFlag == false)            {                continue;            }            cout << strInputLine << endl;            vec_store_line.push_back( strInputLine );        }}else // 没有该文件{cout <<"no such file" << endl;}return vec_store_line;}char  *delete_space(char src[]){void writeFile( string sInputFileName, string sOutputFilename, map< string, string> mapChange );    char *ret = src;    char *p1 = src;    char *p2;    if (NULL == src)        return NULL;    while (*p1 == ' ' || *p1 == '\t')//跳过最前面空白字符(这里增加了2楼提到的'\t'字符)        p1++;    p2 = p1;    while (*p2)        p2++;    while (--p2 >= src && (*p2== ' ' || *p2 == '\t'))//跳过最后面空白字符        ;    while (p1 <= p2)        *src++ = *p1++;//拷贝中间部分    *src = 0;    return ret;}void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& c){  std::string::size_type pos1, pos2;  pos2 = s.find(c);  pos1 = 0;  while(std::string::npos != pos2)  {    v.push_back(s.substr(pos1, pos2-pos1));    pos1 = pos2 + c.size();    pos2 = s.find(c, pos1);  }  if(pos1 != s.length())    v.push_back(s.substr(pos1));}map<string ,string> VectorToMap( vector< string > myvector ){    map< string,string> mapString;    vector<string>::iterator it ;    for (it = myvector.begin() ; it != myvector.end(); ++it)    {        if( string(*it).size() == 0 )            continue;        vector<string> vStoreFirstSecond;        SplitString(*it, vStoreFirstSecond, "\"");        string sFirstString( delete_space( const_cast<char*> ((vStoreFirstSecond[0].c_str() ))));        string sSecondString( delete_space( const_cast<char*> ((vStoreFirstSecond[1].c_str() ))));        cout<< sFirstString<<endl;        cout<< sSecondString<<endl;        mapString.insert( pair<string,string>( sFirstString, sSecondString ) );    }    return mapString;}map< string, string > changTheValue( map< string, string > mapEnglishRC, map< string, string > mapOtherRC){ for( map< string, string>::iterator it = mapEnglishRC.begin(); it != mapEnglishRC.end(); it++) {     map< string, string>::iterator itOtherRC;     itOtherRC = mapOtherRC.find( it -> first );     if(itOtherRC == mapOtherRC.end())     {        continue;     }     else     {        it -> second = itOtherRC ->second;     } } return mapEnglishRC;}void writeFile( string sInputFileName, string sOutputFilename, map< string, string> mapChange ){  ifstream fin(sInputFileName.c_str());  string line;  if(!fin){    cout<<"File open error!\n";    return;  }  ofstream fout(sOutputFilename.c_str());  while(!fin.eof())  {    getline(fin, line);    if(line.size() == 0)    {        fout<<"\n"<<endl;        continue;    }    char *pcInputLine = delete_space( const_cast<char*> ((line.c_str() )));    string strInputLine = string( pcInputLine );    vector<string> vStoreFirstSecond;    SplitString(strInputLine, vStoreFirstSecond, "\"");    if(vStoreFirstSecond.size()>1)    {        string sFirstString( delete_space( const_cast<char*> ((vStoreFirstSecond[0].c_str() ))));        string sSecondString( delete_space( const_cast<char*> ((vStoreFirstSecond[1].c_str() ))));        map< string, string>::iterator it;        it = mapChange.find( sFirstString );        string temp = sFirstString +"      "+"\""+it -> second +"\""+"\n";        cout<< temp<<endl;        fout << sFirstString <<"      "<<"\""<< it -> second <<"\""<<endl;    }    else    {        fout <<strInputLine<<endl;        cout<<strInputLine<<endl;    }  }  fin.close();  fout.close();}void StringToFirstStringSecondString(string inputString, string &firstString, string &secondString){        vector<string> vStoreFirstSecond;        SplitString(inputString, vStoreFirstSecond, "\"");        string sFirstString( delete_space( const_cast<char*> ((vStoreFirstSecond[0].c_str() ))));        string sSecondString( delete_space( const_cast<char*> ((vStoreFirstSecond[1].c_str() ))));        firstString  = sFirstString;        secondString = sSecondString;}

0 0