当前位置: 首页 > news >正文

自己做cdk兑换码网站宁波seo排名优化哪家好

自己做cdk兑换码网站,宁波seo排名优化哪家好,商城网站推广方案,网站服务器租赁价格Abstract寫文字檔轉檔程式是很常見的需求,一般來說,這種都屬於dirty job,沒什麼技巧,純粹是迴圈硬幹,若使用STL來寫轉檔程式,不只程式超短,一個迴圈都不需要!! Introduction昨天網友Momo要我幫他…

Abstract
寫文字檔轉檔程式是很常見的需求,一般來說,這種都屬於dirty job,沒什麼技巧,純粹是迴圈硬幹,若使用STL來寫轉檔程式,不只程式超短,一個迴圈都不需要!!

Introduction
昨天網友Momo要我幫他寫一個轉檔程式,將文字檔轉成XML檔,格式如下

文字檔user_b5fix.dat

-1,-1,-1,-1,-1,-1
一元運算符
,一元運算子
二叉樹
,二元樹
二元運算符
,二元運算子
二分查找
,二分搜尋法
二進制
,二進位
二極管
,二極體
人工智能
,人工智慧
人工過濾
,手動過濾
八進制的
,八進位的

XML檔tongwen.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<traditional>
<phrase><s>数据</s><r>資料</r></phrase>
<phrase><s>台湾</s><r>台灣</r></phrase>
</traditional>
<simplified>

</simplified>
</manifest>

user_b5fix.dat是個純文字檔,記載著繁體中文和簡體中文的對照表,實際上檔案有三千多筆資料,因為篇幅的關係,我只列出前幾行,希望轉成XML檔後,在<s></s>內放簡體中文,在<r></r>內放繁體中文。

txt_to_xml.cpp

1ExpandedBlockStart.gifContractedBlock.gif/**//* 
2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
3InBlock.gif
4InBlock.gifFilename    : txt_to_xml.cpp
5InBlock.gifCompiler    : Visual C++ 8.0
6InBlock.gifDescription : Demo how to transform text to xml
7InBlock.gifRelease     : 01/30/2007 1.1
8ExpandedBlockEnd.gif*/

9None.gif#include <fstream>
10None.gif#include <vector>
11None.gif#include <string>
12None.gif#include <algorithm>
13None.gif
14None.gifusing namespace std;
15None.gif
16ExpandedBlockStart.gifContractedBlock.gifstring op(string& s) dot.gif{
17InBlock.gif  s.replace(s.find(","), 1, "</s><r>");
18InBlock.gif  return "<phrase><s>" + s + "</r></phrase>";
19ExpandedBlockEnd.gif}

20None.gif
21ExpandedBlockStart.gifContractedBlock.gifint main() dot.gif{
22InBlock.gif  ifstream inFile("user_b5fix.dat");
23InBlock.gif  ofstream outFile("tongwen.xml");
24InBlock.gif 
25InBlock.gif  vector<string> svec;
26InBlock.gif  copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(svec));
27InBlock.gif  remove(svec.begin(), svec.end(), "-1,-1,-1,-1,-1,-1");
28InBlock.gif 
29InBlock.gif  transform(svec.begin(), svec.end(), svec.begin(), op);
30InBlock.gif 
31InBlock.gif  outFile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl << "<manifest>" << endl << "<traditional>" << endl;
32InBlock.gif  copy(svec.begin(), svec.end(),  ostream_iterator<string>(outFile, "\n"));
33InBlock.gif  outFile << "</traditional>" << endl << "<simplified>" << endl << endl << "</simplified>" << endl << "</manifest>";
34InBlock.gif
35InBlock.gif  inFile.close();
36InBlock.gif  outFile.close();
37ExpandedBlockEnd.gif}


整個轉檔的程式的想法是:將文字檔讀進vector後,在vector內作轉檔工作,最後再輸出到XML檔。

21行、22行

ifstream inFile("user_b5fix.dat");
ofstream outFile(
"tongwen.xml");


宣告欲讀入的文字user_b5fix.dat和欲輸出的文字檔tongwen.xml。

24行

vector<string> svec;


宣告一個vector。

25行

copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(svec));


將文字檔讀入vector,使用了copy()這個泛型演算法,第一個參數傳入文字檔的開始位置,第二個參數傳入文字檔的結束位置,如此copy()就能從頭到尾的讀取文字檔,第三個參數是將讀進的資料寫到vector。為什麼要用back_inserter()呢?因為我們希望資料是一筆一筆採用附加的方式寫入vector。

26行

remove(svec.begin(), svec.end(), "-1,-1,-1,-1,-1,-1");


這一行算是dirty job,因為原來的user_b5fix.dat文字檔中,第一行是-1,-1,-1,-1,-1,-1這些垃圾資料,所以必須先刪除之,使用了remove()泛型演算法。

27行

transform(svec.begin(), svec.end(), svec.begin(), op);


轉檔工作正式開始,使用了transform()泛型演算法,一般來說transform()是用來將a容器轉換到b容器使用,但由於現在來源和目的是同一個容器,所以第一個參數和第三個參數一樣。

該如何轉換呢?我們必須將規則告訴transform(),第四個參數op是我們另外寫的function,這個參數可以是一般global function,或者是function object(functor)。

16行

ExpandedBlockStart.gifContractedBlock.gifstring op(string& s) dot.gif{
InBlock.gif  s.replace(s.find(
","), 1, "</s><r>");
InBlock.gif 
return "<phrase><s>" + s + "</r></phrase>";
ExpandedBlockEnd.gif}


就是我們自己寫的global function,首先將","替換成</s><r>,然後在每行前後加上XML tag。

或許你會覺得transform()為了轉換規則,還需另開一個global function很麻煩,在boost和C# 3.0的lambda就是為了解決這個問題,可以直接將轉換規則透過lambda寫在transform()裡。

31行

outFile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl << "<manifest>" << endl << "<traditional>" << endl;


處理XML檔頭所需的字串,在C++裡,不只cin、cout可以使用<<喔,檔案也可以。

32行

copy(svec.begin(), svec.end(),  ostream_iterator<string>(outFile, "\n"));


將轉好的vector資料copy到XML檔。

33行

outFile << "</traditional>" << endl << "<simplified>" << endl << endl << "</simplified>" << endl << "</manifest>";


處理XML檔檔尾字串。

35行

inFile.close();
outFile.close();

對兩個檔案進行關檔動作。

Conclusion
本來發下豪語要在20行內寫出來,結果現在扣掉註解,還需26行,哈。若使用boost的lambda還可以再省掉三行,不過最少全部使用STL解決,和我預期的目標接近。

若是C#和Java coder看到這種程式碼應該相當震驚,回想我第一次看到STL時那種驚訝的表情,竟然完全沒用到一行迴圈!!這正是STL優雅之處。
http://www.lbrq.cn/news/2508319.html

相关文章:

  • 唐山正规做网站的公司软件开发外包公司
  • 有什么做宝宝辅食的网站吗sem推广什么意思
  • 如何用织梦cms做网站香港seo公司
  • 做网站怎样用链接赚钱公司的seo是什么意思
  • 国外时尚设计网站免费发布推广信息的b2b
  • 北京电商网站建设公司橘子seo历史查询
  • 南宁手机网站设计策划最好的优化公司
  • 大连英文网站建设精准粉丝引流推广
  • 做设计应该看哪些网站江门seo推广公司
  • 烟台做网站的百度竞价和优化的区别
  • 附近哪里有建设seo 服务
  • php网站是什么数据库文件网站设计费用
  • 如何做中英版网站进入百度官网首页
  • 淘客网站怎么建设免费做网站怎么做网站吗
  • 网页游戏网站模压板百度应用商店app下载
  • 内容相同的 网站搜狗收录提交
  • wordpress做社区网站营业推广策划方案
  • 找项目网站兰州网站开发公司
  • 重庆网站推广服务seo排名工具有哪些
  • 海南建设网网站韶关seo
  • 企业品牌网站建设成都搜索优化排名公司
  • 龙岗网站建设 公司推广如何推销网站
  • 全国疫情最新消息地图seo排名优化怎样
  • 网站建设 提案 框架网络营销师报考条件
  • 专业做校园文化的网站企业推广平台有哪些
  • 新公司网站建设网站推广基本方法是
  • wordpress 企业网站 免费下载如何免费推广网站
  • 如何做英文系统下载网站郑州本地seo顾问
  • 网站建设开发报价明细整站seo排名
  • 武汉抖音seo推广网站关键词排名seo
  • 数据库-索引
  • 数据结构 | 队列:从概念到实战
  • 【Java EE】多线程-初阶-线程的状态
  • Java 排序
  • 三、构建一个Agent
  • 深入理解Java内存与运行时机制:从对象内存布局到指针压缩