看起來是處理連續整數的
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)