#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <cstring>
#include <fstream> // std::ifstream
#include <map>
#include <iostream> // std::cout
#include <fstream> // 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<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;
}