【C语言】【window】--在线翻译器_第1页
【C语言】【window】--在线翻译器_第2页
【C语言】【window】--在线翻译器_第3页
【C语言】【window】--在线翻译器_第4页
【C语言】【window】--在线翻译器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言在线翻译器光影2012年7月8日22:03:22【C语言】【Windows】-在线翻译器01.程序简介程序名称:在线翻译器编译器:vs2010(其它也可以) 程序大小:109K文件包括:在线翻译器.exe, skinh.she,SkinH.dll,msvcr100.dll程序界面:02.任务说明/*【光影队】【任务】【LV5】在线翻译器*/任务名称:在线翻译器任务难度:等级5任务发布时间:任务所需知识:C语言界面编程。算法。任务简介:一个多国语言的在线翻译器。N天前使用学校的电脑,结果鼠标的半报废的货。使用谷歌翻译的时候需要全部删除输入的内容,结果鼠标选择不了,只能一个个字符Delete

2、,或者点击打开新的窗口。每次使用翻译都需要这样很麻烦,突然想要自己写一个翻译器,于是开工了程序需要可以对常用的几种语言间进行翻译。任务资料提示:可以使用URLDownloadToFile对翻译结果的网页进行下载,然后分析网页即可得出翻译结果。URL是:/translate_t?q=要翻译的内容&hl=zh-CN&langpair=源语言|目标语言源语言与目标语言可以在谷歌翻译找到,如:en是英语,zh-CN是中文简体要翻译的内容中的空格用%20代替,换行(rn)用%0A代替。注意网页是UTF-8编码。网页打开:backgroundColor=#

3、fff 后面开始是翻译后的内容后面的内容如果有换行那就带?和其它后面如果没有内容了那就带具体网页可以自己下载网页进行分析。/*03.相关技术001.程序界面:使用对话框。我们按下翻译按钮后。程序得到文本框的内容,然后根据文本的内容长度与标点符号进行分割,然后将分割的内容与相应的语言选择进行URL构造。根据构造的URL下载网页。最后分析网页得到翻译后的内容。002.URL:目标URL是:/translate_t?q=要翻译的内容&hl=zh-CN&langpair=源语言|目标语言源语言与目标语言可以通过用户的下拉列表(Combobox)选择得到

4、。如:中文简体:zh-CN中文繁体:zh-TW英语:en日语:ja韩语:ko法语:fr菲律宾语:tl越南语:vi拉丁语:la更多可以到谷歌翻译上找如将“lucifer”以为中文,那么下载的链接就是:/translate_t?q=lucifer&hl=zh-CN&langpair=en|zh-CN然后使用:URLDownloadToFile进行下载URLDownloadToFile(0,下载目标,保存的文件名,0,NULL);然后就是文件操作了。003.编码网页文件是使用UTF-8编码,我们直接读取的网页内容然后进行显示的时候就会发现,英文正常显

5、示,中文全部都变成了乱码。于是我们需要对其进行编码转换。我们使用char型的数组buffer进行读取然后在进行一下转换:/先转换为Unicodeint wLen2 = MultiByteToWideChar(CP_UTF8, 0, buffer, -1, NULL, 0);wchar_t* wStr2 = (wchar_t*)malloc(sizeof(wchar_t)*wLen2);MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wStr2, wLen2);/再转换为Asciiint aLen2 = WideCharToMultiByte(CP_ACP

6、, 0, wStr2, -1, NULL, 0, NULL, NULL);char* converted2 = (char*)malloc(sizeof(char)*aLen2);WideCharToMultiByte(CP_ACP, 0, wStr2, -1, converted2, aLen2, NULL, NULL);之后显示的内容就不会是乱码了。于是后续的字符串操作,翻译内容的定位就简单了004.检查输入的内容。input是得到的输入内容。然后检查有没有空格和换行。如果有就进行替换。空格换成“%20”换行符换成 “%0A”。大致流程是:/*替换空格和换行。接着我们判断它的大小:inti

7、nputlen=strlen(input);while(inputlen500)截取字符串,进行翻译,得到结果后,继续截取,直到inputlen小于500跳出循环。因为太长的URL得不到结果。最后将剩下那段长度小于500的字符串进行翻译并得出结果。以上完成。*/005对于输入需要设计的算法:a. 判断字符串哪些地方存在空格和换行符。b. 将该位置的空格和换行符用相应的字符串进行替换。“%20 %0A”c. 字符串从500个字节倒数回来有一些常用结束标点(。,?!等),那就从500倒数第一个标点开始截取字符串,标点前面的作为翻译的内容,标点后面的前移,准备下一次截取。d. 如果前500个字符没有

8、这些标点(如有些诗歌压根没有标点),那就从第500个字符开始截取,前面的进行翻译,后面的前移,准备下一次截取。e. 从字符串input里面的从头开始截取index个字符放入NowTochange里面,然后字符串input从index位置后面的字符全部前移。f. 检查输入内容的末端,如果有换行符,那就换成空格。006.检查输出的内容对于截取到的翻译内容,我们还不可以直接显示出来。还要将其中的特殊字符串替换成字符。如“"”是双引号。“”是单引号。“<”是“”.还有特殊的空格符(如全角),读取的时候为“?”或“?”等。这些都需要找出来进行替换。007.定位翻译结果。判断开始位置:从头

9、开始扫描,直到出现 =#fff 这段为止。就是开始出现翻译内容的位置/*while(n)Begin=n+9;break;n+;*/判断结束位置。/*while(nreadsize)if(buffern=)&(buffern+4=)&(buffern+8=)End=n;break;if(buffern=)&(buffern+7=)&(buffern+8=s)End=n;break;if(buffern=)&(buffern+7=)&(buffern+8=/)&(buffern+9=s)End=n;t=NextLine+1;break;n+;*/这一行翻译结束:下一行翻译开始:span最后一行翻译

10、结束:翻译的内容如有换行就会出现多行显示,其中由HTML代码隔开。我们对其进行识别分割,读取出翻译的内容。也就是从开始位置到结束位置,我们截取其中的字符串(翻译后的结果)。然后继续循环得到下一句翻译内容的开始和结束位置。继续截取翻译内容。直到遇到标志:为止。008.复制翻译结果。/*得到结果,复制到剪切板。*/void GetTranText()char Result5120;GetDlgItemTextA(Hwnd,IDC_EDIT2,Result,5120);if(OpenClipboard(Hwnd) HGLOBAL hClip; TCHAR *pBuf; /清空剪切板内容 EmptyC

11、lipboard(); /分配新全局内存空间 hClip=GlobalAlloc(GHND, 5120); /锁住全局内存空间 pBuf=(TCHAR *)GlobalLock(hClip); /将内容写入全局内存空间 memcpy(pBuf, Result, strlen(Result); /将空间中的内容写入剪切板 SetClipboardData(CF_TEXT, hClip); /设置数据 /解锁全局内存空间 GlobalUnlock(hClip); /解锁 /释放全局内存空间GlobalFree(hClip); /关闭剪切板 CloseClipboard(); MessageBoxA

12、(NULL,Result,结果已经成功复制到剪切板,MB_OK);elseMessageBoxA(NULL,不能打开剪切板,复制失败。,Error,MB_OK);以上是程序的相关技术,主要是算法(字符串的处理),C语言对于这方面可以很擅长的,需要用到以前学黑窗体的时候的很多算法知识。对于输入内容的检查与处理,文中只给出算法的思想,没有代码例子。详细可以直接看程序的源代码。04.工程介绍程序源代码:resource.h:加入资源的时候编译器自己添加的。MainFrame.cpp:程序的主函数与消息处理函数。Translation.h:头文件与函数声明Translation.cpp:程序自定义函数。程序源代码文件(TXT):/*/双击打开图标文件05.关于(广告)/*用C语言写的东东更多可到百度贴吧:【erbi_lucifer吧】看看/f?kw=erbi_lucifer#*/*光影QQ空间:http

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论