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

#include 
#include 
#include 
#include 
#include 
#include       // std::ifstream
#include 
#include      // std::cout
#include       // std::ifstream


using 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& 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 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 ((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& 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 VectorToMap( vector< string > myvector )
{
    map< string,string> mapString;
    vector::iterator it ;
    for (it = myvector.begin() ; it != myvector.end(); ++it)
    {
        if( string(*it).size() == 0 )
            continue;
        vector vStoreFirstSecond;
        SplitString(*it, vStoreFirstSecond, "\"");
        string sFirstString( delete_space( const_cast ((vStoreFirstSecond[0].c_str() ))));
        string sSecondString( delete_space( const_cast ((vStoreFirstSecond[1].c_str() ))));
        cout<< sFirstString<( 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"< ((line.c_str() )));
    string strInputLine = string( pcInputLine );


    vector vStoreFirstSecond;
    SplitString(strInputLine, vStoreFirstSecond, "\"");
    if(vStoreFirstSecond.size()>1)
    {
        string sFirstString( delete_space( const_cast ((vStoreFirstSecond[0].c_str() ))));
        string sSecondString( delete_space( const_cast ((vStoreFirstSecond[1].c_str() ))));
        map< string, string>::iterator it;
        it = mapChange.find( sFirstString );
        string temp = sFirstString +"      "+"\""+it -> second +"\""+"\n";
        cout<< temp< second <<"\""< vStoreFirstSecond;
        SplitString(inputString, vStoreFirstSecond, "\"");
        string sFirstString( delete_space( const_cast ((vStoreFirstSecond[0].c_str() ))));
        string sSecondString( delete_space( const_cast ((vStoreFirstSecond[1].c_str() ))));
        firstString  = sFirstString;
        secondString = sSecondString;
}

你可能感兴趣的:(stl,c++,代码)