c++ map数据结构比较同义词去重,转换排除

来源:互联网 发布:软件开发实施方案 编辑:程序博客网 时间:2024/05/18 02:00
方便大家.日后需要,可以找的到!#include "stdafx.h"#include<map>#include<vector>#include<string>#include<fstream>using namespace std;string&   replace_all_distinct(string&   str,const   string&   old_value,const   string&   new_value)     {     for(string::size_type   pos(0);   pos!=string::npos;   pos+=new_value.length())   {     if(   (pos=str.find(old_value,pos))!=string::npos   )     str.replace(pos,old_value.length(),new_value);     else   break;     }     return   str;     }//截取字符void ExtractSubString(std::string strSource, char ch, std::vector<std::string>& vString){int nBegin = 0;int nEnd = 0;nEnd = strSource.find(ch, nBegin);while (nEnd != -1){vString.push_back(strSource.substr(nBegin, nEnd - nBegin));nBegin = nEnd + 1;nEnd = strSource.find(ch, nBegin);}if ( nBegin < strSource.length()){vString.push_back(strSource.substr(nBegin,strSource.length()-nBegin));}}void HandleDate(){//读文件std::string m_Pro_Path = "C:/Users/Administrator/Desktop/同义词库/同义词.txt";char pBuf[4024]={0};FILE * pFill = fopen(m_Pro_Path.c_str(),"r");std::map<std::string,std::string> mapurl;if(pFill){int nLine = 0;while( fgets(pBuf,4024,pFill)!=NULL ){nLine++;std::string strLine(pBuf);std::vector<std::string> vString;ExtractSubString(strLine, ',', vString);if ( vString.size()<2){continue;}std::string strFirst = vString.at(0);if ( strFirst.find("十一") != string::npos){std::string ss = strLine;std::vector<std::string> vString1;ExtractSubString(strLine, ',', vString1);}std::string strSecond = vString.at(1);strFirst = replace_all_distinct(strFirst,"\t","");strFirst = replace_all_distinct(strFirst,"\n","");strSecond = replace_all_distinct(strSecond,"\t","");strSecond = replace_all_distinct(strSecond,"\n","");if( mapurl.find(strFirst) == mapurl.end()){mapurl.insert(std::map<std::string,std::string>::value_type(strFirst,strSecond));}if( mapurl.find(strSecond) == mapurl.end()){mapurl.insert(std::map<std::string,std::string>::value_type(strSecond,strFirst));}}}//写到文件std::map<std::string, std::string>::iterator it;std::string strBuffer = "";for (it = mapurl.begin(); it != mapurl.end(); ++it){strBuffer += it->first.c_str();strBuffer += ',';strBuffer += it->second.c_str();strBuffer += "\r\n";}FILE *fp = fopen("C:/Users/Administrator/Desktop/同义词库/后处理同义词.txt", "wt+");if (fp == NULL)return;fwrite((char*)strBuffer.c_str(), strBuffer.size(), 1, fp);fclose(fp);}int main(){HandleDate();return 0;}


原创粉丝点击