Re: [問題] 有關英文+數字的大小比較該怎麼寫比較好

看板C_and_CPP作者 (http://0rz.tw/3BGhp)時間14年前 (2010/08/14 21:53), 編輯推噓4(4028)
留言32則, 6人參與, 最新討論串3/3 (看更多)
自問自答了... 分數排序的部分,應該找一下排序法就可以弄到~ 再來就是排序分數一樣的情形,所以我只寫出排學號的方法 (反正是幫忙寫的XD) ========================================================================== //一個字一個字抓 ASCII 碼出來比較大小 string ID[2]={"A00333322","A00333323"}; //不限定長度,但是每個長度都要一樣才可以用 strlen 取長度 int lenth = strlen(ID[0].c_str()); for(int i=0;i<lenth;i++) { //利用 (int) 將英文字母轉成 ASCII碼 cout << (int)ID[0][i] << " v.s " << (int)ID[1][i] << endl; //比較,一有勝負馬上就要決定大小,並跳出迴圈 if((int)ID[0][i] < (int)ID[1][i]) { cout << endl << "第一個較小" << endl; break; } else if((int)ID[0][i] == (int)ID[1][i]) { continue; } if((int)ID[0][i] > (int)ID[1][i]) { cout << endl << "第二個較小" << endl; break; } } 如果還有更好的方法,還可以提出來,上面那位大大寫的難度太高了看不懂... 不過還是謝謝了 :D ※ 引述《smallpig01 (http://0rz.tw/3BGhp)》之銘言: : 遇到一個學號比較的問題 : ex有五個學生,要比較分數高低,然後依序印出,假設分數一樣則比較學號 : 學號 分數 學號 分數 : A005 30 B003 50 : B003 50 E006 50 : A002 30 結果==> D001 40 : D001 40 A002 30 : E006 50 A005 30 : 分數的排序我會,但是遇到有英文字卡在前面的學號就不知道該怎麼比較了 : EX A002 B003 : A005 E006 : 這兩組的分數一樣,排序結果為 第一組002在005前面 第二組B在E前面 : 我目前只想到可以把前面的英文拆成 ASCII 碼 補在前方 : EX A005 = 63005 然後 存成 long int 的型態再去比 : 我的學號是存成String型態,不知道怎麼只取第一個英文字... : 還有其他更方便的方法可以比較這種類型的文字~ : 謝謝 -- Google smallpig01████████████████▕搜尋進階搜尋 | 使用偏好 ▇▇  ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ 搜尋: ○所有網頁 ○中文網頁⊙繁體中文網頁 ○台灣的網頁 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.161.183

08/14 21:55, , 1F
上面大大寫的運用到 string 內建照「字典順序」的比較
08/14 21:55, 1F

08/14 21:56, , 2F
方法, string 物件直接抓來比就好了, 標準庫有重載比
08/14 21:56, 2F

08/14 21:56, , 3F
較的運算子
08/14 21:56, 3F

08/14 21:57, , 4F
string.size()不用你用strlen= = 而且char應該也可以比
08/14 21:57, 4F

08/14 21:58, , 5F
吧? 不用再轉int的樣子 反正內部都用數字在存的
08/14 21:58, 5F

08/14 21:59, , 6F
而且相等那個elseif可以整個砍掉 你block裡沒其他code
08/14 21:59, 6F

08/14 21:59, , 7F
可以讓程式碼簡潔一點..orz
08/14 21:59, 7F

08/14 22:18, , 8F
08/14 22:18, 8F

08/14 22:19, , 9F
的概念, 只不過他把學號跟分數包在一起可以方便一起
08/14 22:19, 9F

08/14 22:20, , 10F
換位置, 然後提供比較大小的函式, 排序的部份用標準庫
08/14 22:20, 10F

08/14 22:20, , 11F
就好
08/14 22:20, 11F

08/14 23:02, , 12F
如果排完分數再排字母OK嗎?
08/14 23:02, 12F

08/14 23:06, , 13F
抱歉我耍白了,看起來應該要一起比較才OK / ˇ \
08/14 23:06, 13F

08/14 23:09, , 14F
原來字串可以直接比較...想了一個晚上zz
08/14 23:09, 14F

08/14 23:14, , 15F
想要改變行為, 只要改一下char_traits, 一樣可以用其
08/14 23:14, 15F

08/14 23:15, , 16F
他大部分的功能
08/14 23:15, 16F

08/14 23:15, , 17F
這裡可以先對學號做排序, 再對分數作排序, 不過就要改
08/14 23:15, 17F

08/14 23:16, , 18F
呼叫stable_sort, 個人習慣學號的寫一個, 分數寫一個
08/14 23:16, 18F

08/14 23:17, , 19F
雖然排起來會比較慢, 不過需求臨時要改的話換一下順序
08/14 23:17, 19F

08/14 23:17, , 20F
就解決
08/14 23:17, 20F

08/14 23:26, , 21F
樓上大神一語敲醒夢中人呀!!!!!!
08/14 23:26, 21F

08/14 23:27, , 22F
原來還有stable_sort這個東西,又學到一招^___^
08/14 23:27, 22F

08/14 23:28, , 23F
STL的東東沒學全,真是麻煩>_<
08/14 23:28, 23F

08/14 23:34, , 24F
我不是大神...
08/14 23:34, 24F

08/14 23:38, , 25F
還是很感謝啦,讓小弟學習到新東西
08/14 23:38, 25F

08/14 23:41, , 26F
你對 char_traits 沒興趣嗎? 0.0
08/14 23:41, 26F

08/14 23:44, , 27F
沒接觸過耶 >_<
08/14 23:44, 27F

08/14 23:45, , 28F
string 實際上是typedef後的型別別名, 你可以研究一下
08/14 23:45, 28F

08/14 23:46, , 29F
他真正的長相, 跟比大小時是怎麼運作的, 這還蠻好玩
08/14 23:46, 29F

08/14 23:48, , 30F
樓上大神一語敲醒夢中人呀!!!!!!
08/14 23:48, 30F

08/14 23:51, , 31F
樓上和樓樓上都是大神
08/14 23:51, 31F

08/14 23:51, , 32F
樓樓上才是真的大神 = =
08/14 23:51, 32F
文章代碼(AID): #1CPf_H3X (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CPf_H3X (C_and_CPP)