Re: [問題] 擷取到的字串轉換成變數

看板C_and_CPP作者 (爵士鼓王)時間10年前 (2013/08/10 00:54), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《snk521 (哇哈哈)》之銘言: : ※ [本文轉錄自 C_Sharp 看板 #1I1Dwco6 ] : 作者: snk521 (哇哈哈) 看板: C_Sharp : 標題: [問題] 擷取到的字串轉換成變數 : 時間: Fri Aug 9 20:20:52 2013 : 請問板上各位高手如果我想要把截取到的字串轉換成另一個字串, : 怎樣的方是會比較好呢?假設今天我從一份txt檔擷取一段文字下來, : 如果我截取的文字是A,我希望我能把其轉換成B以後再貼到另一個txt檔。 : Ex.假設我截取到"Apple"這段文字,我會希望把"Apple"轉換為"Dog"然後 : 打印到另一個txt檔。我有想過用If判斷式的方式來轉換,但是要是對應表 : 高達200多組,程式會看起來很繁瑣。想請問有沒有更好的方式或元件可以 : 達成我想要的效果呢?能否把截取到的字串轉為變數再利用Define的方式 : 讓其轉換成另一個字串呢?該如何做? : Apple <---> Dog : Orange <---> Cat : Grape <---> Lion : . . . : . . . : . . . 可以試看看這個演算法 : void FindString(void) { const char *sFind[][2] = { { "Apple","Dog" }, { "Orange","Cat"}, { "Grape","Lion"} }; const char *sRead = 0; / ... sRead 表示你從檔案讀取到某部份的字串然後在下面做分析 // 儲存要替換的字串 const char *sTarget = 0; // 計算陣列大小 const int Findsize = sizeof(sFind) / (2 * sizeof(char*)); for(int i = 0; i < Findsize; i++) { // 利用 strcmpi() 函式比對第一個字串是否相符 if (!strcmpi(sRead, sFind[i][0]) { // 儲存要替換的字 sTarget = sFind[i][1]; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.141.146.62

08/10 00:59, , 1F
c的話就用這個作法,如果c++就有stl的map能直接用
08/10 00:59, 1F

08/10 20:28, , 2F
如果有C++ primer的話,我記得教map的地方有這樣的程式
08/10 20:28, 2F

08/10 20:28, , 3F
功能完全一樣
08/10 20:28, 3F

08/10 23:00, , 4F
利用 template class map<> 的方式也是可以的,但產生出來的
08/10 23:00, 4F

08/10 23:02, , 5F
執行檔會變大,因為它包含很多程式碼在裡面,但好處是很方便
08/10 23:02, 5F

08/10 23:04, , 6F
提供部份可操作的演算法,但如果各位有看過 map<> 的原始碼
08/10 23:04, 6F

08/10 23:07, , 7F
就能看出 map<> 是以紅黑樹當做它儲存資料容器,對只儲存小
08/10 23:07, 7F

08/10 23:09, , 8F
型的資料來說等於是殺雞用牛刀.
08/10 23:09, 8F

08/12 18:54, , 9F
那就排序配二分搜尋吧?原理一樣
08/12 18:54, 9F
文章代碼(AID): #1I1HxL0n (C_and_CPP)
文章代碼(AID): #1I1HxL0n (C_and_CPP)