看板 C_and_CPP 關於我們 聯絡資訊
爬文很多資料 但沒辦法實作出來自己想要的 一直debug失敗= = 雖然讀寫檔實作很多例子了 不過這次 有幾個問題一直很困擾 分別列出來請益高手 1.固定長度切割字串 據我所知在C語言裡只有strtok才能辦到分割的 這種方法是利用字串中指定符號來切的,感覺沒辦法固定長度 格式如下 strtok(變數1,變數2) 變數1=欲要切割的字串 char* 變數2=切割指定符號(例如空格,tab等等) 例如 char *a; string k="12345 qwer" a=strtok((*char)k.c_str()," ") 結果a=12345 但我要的是讀一行字串再把字串分每個字元放再個別放陣列 例如string a="12345. qwe" 切完後 b[0]="1"....b[5]="."...b[6]=" "類推 要什麼切法= =? 本來利用string特性可以任意合併改變陣列大小(讀每行都合併起來) 但接著把它1個1個字元分開好像有點難... 2.如果問題1沒辦法的話 還有一個想法就是直接一次讀一個 我發現小筆資料可以讀,但遇到大資料直接爆掉(都可編譯過)= = 不知道是指標記憶體問題還是讀檔問題... 例如 ifstream fin; fin.open("input.txt"); char *tmp;int count=0; while(fin>>tmp[count]){ count++;} 3.如果利用一次讀一行切割再讀下一行(還是要分成每個字串切成一個字元) 也就是類似問題1 (與問題1不同的地方在於問題1是直接合併所有資料再分割1個字元的) 例如 string a,b; while(getline(fin,a,"\n")){ b+=a;} 可以改善問題2讀取大資料(但就卡在分割了) 還是沒辦法實作... 抱歉問題有點多QQ 因為要實作LCS= =我懂原理,但卡讀寫檔部分... 就類似把兩份txt文章比較之類 最後有請高手了,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.204.43
james732:第一個問題 http://codepad.org/Nt9yLmzG 11/14 22:05
littleshan:1. 你試試 string k="abc"; cout << k[1]; 11/14 22:05
littleshan: 切都不用切 11/14 22:05
james732:第二個問題:tmp根本沒分配空間 (置底第3戒) 11/14 22:06
james732:第三個問題 抱歉我看不懂你在問什麼 11/14 22:07
firejox:LCS? longest common sequence? 11/14 22:09
firejox:切割字串... 迴圈就可以切了呀... 11/14 22:13
kiki86151:耶!感謝各位大大解惑 我大概了解一下了 來去debug 11/14 22:19
shadow0326:為什麼都裝到string,裡面了,還要特地換成array o_0? 11/14 22:51
diabloevagto:借標題問另一種問題 11/14 23:20
diabloevagto:double temp; cin>>temp; cout<<temp; 11/14 23:20
diabloevagto:我的temp只是要輸出而已,有辦法把三行合在一起嗎? 11/14 23:21
diabloevagto:就是說讀入的直接輸出,不用再用一個temp暫存 11/14 23:21
diabloevagto:我用cin.get()讀入的都直接是string 11/14 23:21
james732:樓上的我只知道 http://codepad.org/Zx3zK6SW 11/14 23:28
james732:不過我不知道要怎麼讓它只跑一次...XD 11/14 23:28
purincess:輸入完以後按ctrl-d (*nix) 或ctrl-z (win) ? 11/14 23:36
diabloevagto:我其實是要用在傳參數的,現在都是用暫存,想說應該 11/14 23:36
diabloevagto:有更漂亮的寫法 11/14 23:37
james732:聽起來我提供的應該不合你的意 XD 11/14 23:37
diabloevagto:抱歉...我敘述的不對= = 11/14 23:38
diabloevagto:想說可能cin有提供內建的,但我怎麼看都沒有... 11/14 23:39
diabloevagto:沒有直接轉型的= = 11/14 23:39
shadow0326:型別在istream_iterator的時候就可以給啊 @@ 11/14 23:41
james732:越來越不懂diabloevagto要做的是什麼了...XD 11/14 23:42
diabloevagto:http://codepad.org/20sisp6L 11/14 23:55
diabloevagto:大概是這個感覺 11/14 23:55
shadow0326:那就可以 cout << *(istream_iterator<double>(cin)) 11/15 00:07
james732:懂你的意思,但我不知道要怎麼改 11/15 00:07
shadow0326:啊我沒看到fabs 請自行加上 XD 11/15 00:09
james732:所以就是這個樣子 http://codepad.org/dp1c5wvi 11/15 00:10
james732:感謝shadow0326,這招我現在才會XD (不過有點冗長) 11/15 00:10
shadow0326:可以 typedef istream_iterator<double> i_am_short 11/15 00:11
james732:說的也是XD 要想個好名字又要花點腦筋了 11/15 00:11
purincess:型態是double名字取short不行的啦!!! 11/15 00:19
diabloevagto:多謝指教!!! 11/15 00:29