作者georgeya007 (綠茶不綠)
看板C_and_CPP
標題[問題] qsort排列字串問題
時間Mon Apr 16 14:15:50 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) c++
問題(Question): 我的目標 是要 先輸入一個n決定要輸入幾個字串
然後 把這些字串依照大小順序排列
這些字串可以是數字 也可以是英文字
因為老師沒有教過qsort的用法 所以我的CODE也是從GOOGLE上找來的
(而且他又規定要O(nlogn)的速度)
所以也不能自己打自己的排列(應該說我根本不知道該怎麼打~"~)
http://codepad.org/o9NFsIdb 這個是原本自己先定義一個字串陣列 然後讓它排序
4 123 ABC xyz Charlie請按任意鍵繼續 . . .
這是輸出的結果 看起來是有按照字串的大小排列
但是如果 我把它改成自己輸入字串
http://codepad.org/Ppo7WEud 它就會跑出一些奇怪的符號 或者根本什麼都跑不出來
不知道這是記憶體儲存的問題還是什麼
希望有人可以幫我看一下@@
還是這個題目本來就不應該用這樣做呢?
有什麼更好的方法嗎
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.139.39
→ stimim:先了解 qsort 的四個參數分別要傳什麼吧 04/16 14:27
→ georgeya007:我其實看不懂它第四個參數到底是怎麼運作的@@ 04/16 14:33
→ georgeya007:GOOGLE過了還是沒什麼頭緒 身旁的書也沒有提到 04/16 14:34
→ georgeya007:是因為它sort完之後 會排到陣列的最後面嗎 04/16 14:44
→ bob123:你應該要修改compareInt使他適用於比較字串長度...目前是 04/16 16:38
→ bob123:前4個字一樣後面就不管囉 04/16 16:41
→ bob123:至於印出來會這樣..跟你的參數有關 04/16 16:44
→ georgeya007:那請問 如果它超過四個字 但是長度一樣 要怎麼比呢? 04/16 20:41
→ diabloevagto:應該是從第一個開始比 04/16 20:44
→ georgeya007:我還是不太清楚為什麼他只會比四個字@@可以解釋一下嗎 04/16 22:43
→ diabloevagto:---------請忽略上面那堆,寫的有點亂,下面重回---- 04/16 23:19
→ diabloevagto:你那段程式會錯是因為你沒有給予初值,而且你將100 04/16 23:20
→ diabloevagto:筆資料都一起下去排序,其中那些亂碼也都一起排序 04/16 23:20
→ diabloevagto:如果你在排序後將100筆資料都cout出來你會發現你輸入 04/16 23:21
→ diabloevagto:的資料都有正常排序。 04/16 23:21
→ diabloevagto:你程式有兩種解法 04/16 23:22
→ diabloevagto:1.將所有資料都給初始值,但你會排序一堆空值,這樣 04/16 23:22
→ diabloevagto:會浪費你的時間,並且印出一堆'\0' 04/16 23:23
→ diabloevagto:2.sizeof(str_buf)/sizeof(str_buf[0])改成n 04/16 23:23
→ diabloevagto:只排序你所輸入的資料筆數,這是比較好的解法 04/16 23:24
→ diabloevagto:那些資料都會放在最前面n個 04/16 23:24
→ diabloevagto:另外幫我把上面很亂的那堆回文修掉吧... 04/16 23:25
※ 編輯: georgeya007 來自: 140.113.139.39 (04/16 23:35)
→ bob123:函式取名為compareInt..顧名思義是指用來做int的比較... 04/17 01:47
→ bob123:會只取4個字的原因是他把char指標轉為int指標再取值 04/17 01:49
→ bob123:int為4byte所以取4個字 另我前面推文誤以為是要比長度 抱歉 04/17 01:59
→ bob123:題目應該是需要用strcmp/strncmp 04/17 02:01