首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

翻译指定的字符串有关问题,请各位多多帮忙哦

2012-02-27 
翻译指定的字符串问题,请各位多多帮忙哦!有两个文件一个是要被翻译的文件,另一个是存放翻译字符串的文件。

翻译指定的字符串问题,请各位多多帮忙哦!
有两个文件   一个是要被翻译的文件,另一个是存放翻译字符串的文件。
要被翻译的文件中有很多下列字段:
<LI>   <OBJECT   type= "text/sitemap ">
      <param   name= "Name "   value= "Welcome   ">
<param   name= "Local "   value= "Welcome\welcome.htm ">
<param   name= "ImageNumber "   value= "1 ">
</OBJECT>
要求翻译 <LI>   <OBJECT   type= "text/sitemap "> 的下一行的value后面的值,这里即是Welcome   。其他行不翻译。

存放翻译字符串的文件格式如下:
Welcome     ===欢迎
get   started===开始
........

要求程序将文件中所有 <LI>   <OBJECT   type= "text/sitemap ">
      <param   name= "Name "   value= "Welcome   ">
<param   name= "Local "   value= "Welcome\welcome.htm ">
<param   name= "ImageNumber "   value= "1 ">
</OBJECT>
字段的文本都被翻译成 <LI>   <OBJECT   type= "text/sitemap ">
      <param   name= "Name "   value= "欢迎 ">
<param   name= "Local "   value= "Welcome\welcome.htm ">
<param   name= "ImageNumber "   value= "1 ">
</OBJECT>
请问该如何做,我做了一晚上,算法总是不对,只好又来请教各位了~~


[解决办法]
用正则表达式。几乎2~3行就搞定了。
[解决办法]
你先用正则做出来,就可以说服他了。
[解决办法]
那就看C的strstr函数的帮助。
[解决办法]
既然你全用的MFC的东西,就去vc编程版问吧。
[解决办法]
咱从来不用MFC带的东西,只用标准C++的。
算法,太复杂了,既然有正则,我就绝对不会费脑筋写和看这么复杂的东西。
[解决办法]
newFile.WriteString(sLine);你这个东西帮不了你。

至少现在也帮你up了一下人气。
[解决办法]
不知道代码是哪里有问题,还有 newFile.WriteString(sLine);这句话似乎不起作用,写不进去文件,不知道为什么
一步一步跟踪,看看返回值是不是正确,如果不正确,就看看错误代码的含义,才不到30行逻辑并不复杂的代码,楼主加油。
ps:错误代码可以在vc的调试器监视功能里面输入 ##,hr,回车之后就会显示错误的文字描述,##代表错误数字
[解决办法]
不能用正则就比较麻烦了~

如果内容少了还好,
如果文件比较大,
那就相当麻烦了 ~

随便写一个吧,
楼主参看看 ~
可以考虑根据需要把其中的某些信息缓存一下,提高点效率~
[解决办法]
人气终于足到jixingzhong(瞌睡虫·星辰) 出手了嘛。
[解决办法]
写了部分:

string line;
int index;

map <string, string> strmap;
string prestring, sufstring;
ifstream filedic( "test1.txt "); //词典文件
while(!filedic.eof())
{
getline(filedic, line);
index = line.find( "=== ");
prestring=line.substr(0, index);
sufstring=line.substr(index+3);
strmap.insert(make_pair(prestring, sufstring));
//cout < <prestring < < " ~ " < <sufstring < <endl;
}

这个部分把词典读取到一个 map 中,
然后后面就用上次的代码, 提取 value,
然后使用 strmap[value] 得到对应的 “翻译内容”, 写到文件中去即可 ~


注意覆盖的字符数,
建议新建一个文件, 不需要翻译的内容原文写到文件中,
需要翻译的写新内容即可 ~
[解决办法]
#include <map>
#include <vector>
#include <fstream>
#include <string>
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
string line;
int index;
//这里根据字典文件创建 map
map <string, string> strmap;
string prestring, sufstring;
ifstream filedic( "test1.txt "); //
while(!filedic.eof())
{
getline(filedic, line);
index = line.find( "=== ");
prestring=line.substr(0, index);
sufstring=line.substr(index+3);
strmap.insert(make_pair(prestring, sufstring));
//cout < <prestring < < " ~ " < <sufstring < <endl;
}
//这里开始进行 翻译过程
int flag=0;
string value;
map <string, string> ::iterator iter;
ifstream infile( "test.txt "); //输入文件
ofstream outfile( "out.txt "); //输出文件
while(!infile.eof())
{
getline(infile, line);
//cout < <line < <endl;
if(line == " </OBJECT> ")
{flag=0; outfile < <line < <endl;} //注意这个内容的输出不要漏了
if(flag)
{
index = line.find( "value ")+7;
value=line.substr(index); //截取 value= " 后面的string
value=value.substr(0, value.length()-2); //去除后面 ">
iter = strmap.find(value); //查找map
if(iter != strmap.end()) //如果找到了,进行翻译写入
outfile < <line.substr(0, index) < <strmap[value] < < "> \ " " < <endl;
else //否则输出原文
outfile < <line < <endl;
}
if(line == " <LI> <OBJECT type=\ "text/sitemap\ "> ")
{flag=1; outfile < <line < <endl;} //注意这个内容的输出不要漏了
}

system( "pause ");
return 0;
}

[解决办法]
要求程序将文件中所有 <LI> <OBJECT type= "text/sitemap ">
<param name= "Name " value= "Welcome ">
<param name= "Local " value= "Welcome\welcome.htm ">
<param name= "ImageNumber " value= "1 ">
</OBJECT>
字段的文本都被翻译成 <LI> <OBJECT type= "text/sitemap ">
<param name= "Name " value= "欢迎 ">
<param name= "Local " value= "Welcome\welcome.htm ">
<param name= "ImageNumber " value= "1 ">
</OBJECT>
----------------------------------------
可尝试tinyxml库来解决


热点排行