看板 C_and_CPP 關於我們 聯絡資訊
看起來是處理連續整數的 ex 輸入 xxx01,xxx02,xxx03,xxx05,xxx08,xxx09 輸出 xxx01-xxx03,xxx05,xxx08-xxx09 ※ 引述《qrtt1 (null)》之銘言: : ※ 引述《jolinsens (cherry花)》之銘言: …… : : 程式碼(Code):(請善用置底文網頁, 記得排版) : : import java.util.*; : : public class strsorting{ : : String converMachNo(String sMachs) : : { String [] temp = sMachs.split(","); : 把 sMachs 以『,』為分隔字元切開 : : ArrayList<String> forsorting = new ArrayList<String>(); : 準備一個 list 來放運算結果 : : for(int i = 0; i < temp.length;i++) : : forsorting.add(temp[i]); : 把第 i 個 token 放到 list : : Collections.sort(forsorting); : 排序 list : : temp = forsorting.toArray(new String[0]); : 重新指定 temp 的內容為 list 轉成陣列 : : int num1, num2, count =1; : : sMachs = temp[0]; : 重新指定 sMachs 內容為 temp[0] 的字串 //初始設定為第一個數值 : : num1 = Integer.parseInt(temp[0].substring(3)); : 取 temp[0] index 3 之後的字串,並轉成 Integer : : for(int i = 1; i <temp.length; i++) : : { : : num2 = Integer.parseInt(temp[i].substring(3)); : 取 temp[i] index 3 之後的字串,並轉成 Integer : : if((num2 - num1) != 1) //如果不連續 : : { if(count!= 1) : : sMachs +=("-"+temp[i-1]+","+temp[i]); //如果不為1(超過1個) //加入符號、上個連續數值的結尾 和 新數值的起始 : else : sMachs += (","+temp[i]); //否則加入新數值 : : count = 0; //連續數值歸0 : : } : : num1 = num2; : : count++; //換成下個數值 : : } : : if(count!= 1) : : sMachs += ("-"+temp[temp.length-1]); : : return sMachs; } //如果最後一個數值為連續數值,需加入結尾 //C++的部分這裡可以改用 back() : : 補充說明(Supplement): : 這什麼鬼東西qq 作者的思路好亂呦。 : 不值得『直譯』,建議還是問 input/output spec 重寫吧。 換成C++ http://codepad.org/2EnrHfRy class的部分沒加 大概這樣吧,獻醜了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.116.250 ※ 編輯: kiedveian 來自: 59.117.116.250 (10/05 21:19)