Map和vector使用,合并中英文

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>


using namespace std;


const string FILE_EN = "en.txt";
const string FILE_CN = "cn.txt";


const string FILE_OUTPUT = "data.out";


vector<string> g_vctEN;
vector<string> g_vctCN;


struct DATA 
{
string strCn;
string strEn;
};


map<string, DATA> g_mpData;


void ReadData(string strFileName, vector<string> &vctData)
{
ifstream fin(strFileName.c_str());
if (fin.bad())
{
vctData.clear();
return;
}


string str  = "";
while (getline(fin,str))
{
if (str!="")
{
vctData.push_back(str);
}
}
fin.close();
return;
}


void InitData(void)
{
ReadData(FILE_EN,g_vctEN);
ReadData(FILE_CN,g_vctCN);
return;
}




void OutPutData(void)
{
ofstream fout(FILE_OUTPUT);
if (fout.bad())
{
return;
}
for (map<string, DATA>::iterator iCtrl = g_mpData.begin();
iCtrl != g_mpData.end();
iCtrl++)
{
fout << iCtrl->first << "\t";
fout << iCtrl->second.strCn << "\t";
fout << iCtrl->second.strEn << "\n";
}
fout.close();
g_mpData.clear();
return;
}


void GetID(vector<string> &vct, map<string,string> &mp)
{
for (unsigned int i=0; i<vct.size(); i++)
{
string str = vct[i];
string strID = str.substr(0,str.find("\t"));


mp[strID] = strID;
}
return;
}


void GetData(map<string, string> &mp, vector<string> &vct)
{
for (unsigned int i=0; i<vct.size(); i++)
{
string str = vct[i];
string strID = str.substr(0,str.find("\t"));
string strData = str.substr(str.find("\t")+1);


mp[strID] = strData;
}
return;
}


string FindData(map<string,string> &mp, string str)
{
map<string,string>::iterator iPos = mp.find(str);
if (iPos == mp.end())
{
return "";
}
else
{
return iPos->second;
}
}


void SearchData(void)
{
//获取总共的id:包括en,cn里面共同拥有的;
map<string,string> mpID;
mpID.clear();


GetID(g_vctCN,mpID);
GetID(g_vctEN,mpID);


//认为mpID里面存入了en和cn里面所有的ID;


map<string,string> mpEN;
map<string,string> mpCN;


GetData(mpEN,g_vctEN);
GetData(mpCN,g_vctCN);


//遍历mpID;//分别搜索en和cn的data;
for (map<string,string>::iterator iCtrl = mpID.begin();
iCtrl != mpID.end();
iCtrl++)
{
string strID = iCtrl->first;


string strDataEn = FindData(mpEN,strID);
string strDataCn = FindData(mpCN,strID);


DATA d;
d.strCn = strDataCn;
d.strEn = strDataEn;


g_mpData[strID] = d;
}


mpID.clear();
mpCN.clear();
mpEN.clear();
g_vctCN.clear();
g_vctEN.clear();
return;
}


int DeleteDate()
{
string fileName = "date.out";
string finNewName = "date.txt";
string strDate="";
ifstream finReade(fileName.c_str());
ofstream finWrite(finNewName.c_str());
if (finReade.bad())
{
return -1;
}
if (finWrite.bad())
{
return -1;
}
while (getline(finReade,strDate))
{
while( 1 )
{
int nPos = strDate.find_first_of( "\"");
if ( nPos != string::npos )
{
strDate =    strDate.substr( 0 , nPos ) + strDate.substr( nPos + 1 , -1 );
}
else
break;
}
finWrite<<strDate;


}
finReade.close();
finWrite.clear();


}
void fnGO(void)
{
InitData();


SearchData();


OutPutData();


//DeleteDate();
}


int main(void)
{
fnGO();
return 1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值