題目:https://uva.onlinejudge.org/external/112/p11233.pdf
大概題意:plural就是複數形,ex:strawberry->strawberries。題目的前兩段都是廢話,直接從題目的第一點If開始看就好。總之,這題就是把各種英文名詞轉成複數形態。
If the word is in the list of irregular words replace it with the given plural.
如果屬於不規則的類型字,就替換成input給的複數形態。ex:fish->fish。其他,y->ies,o,s,ch,sh,x->加es。一般的話就是+s。
input:
第一行:
L N。L是這題給的不規則單字有幾個,N是要處理轉成複數形態的單字數。
有不規則單字L行 ex:rice rice,就把讀到是rice的字直接印出rice。
要處理N個單字轉成複數形態。
程式碼:
import java.util.Scanner;
public class DeliDeli {
public static void main(String[] args) {
int L,N;
//irregular words Array
String[] IRfrom,IRto,tempArr;
String temp;
Scanner scanner=new Scanner(System.in);
//讀入irregular words的數量及case數
L=scanner.nextInt();
N=scanner.nextInt();
boolean done;
//產生實體陣列
IRfrom=new String[L];
IRto=new String[L];
//scanner讀兩個數字後有個"Enter",讀一行讓他過去
scanner.nextLine();
//L為irregular words的個數,此行讀入irregular words
for(int i=0;i<L;i++){
//切割用陣列
tempArr=scanner.nextLine().split(" ");
IRfrom[i]=tempArr[0];
IRto[i]=tempArr[1];
}
//處理要印出的case
for(int i=0;i<N;i++){
//done 印出過後為true
done=false;
//讀這行要處理的String
temp=scanner.next();
for(int j=0;j<L;j++){
//有符合irregular words的話就印出對應的word
if(temp.equals(IRfrom[j])){
System.out.println(IRto[j]);
//印出後done為true
done=true;
break;
}
}
//除了用goto外,不知道怎麼一行continue外面第二層的迴圈,這邊用boolean判斷有無印出
if(done){continue;}
//如果字尾是"y"的話會回傳true
if(temp.endsWith("y")){
//利用substring只截到最後一個字前,再用concat接ies連起來並印出。
System.out.println(temp.substring(0, temp.length()-1).concat("ies"));
continue;
}
//如果字尾是以下這幾個的話...
if(temp.endsWith("o")||temp.endsWith("s")||temp.endsWith("ch")||temp.endsWith("sh")||temp.endsWith("x")){
//concat接"es"印出
System.out.println(temp.concat("es"));
continue;
}
//以上皆沒觸發的話,就直接+"s"就行了
System.out.println(temp.concat("s"));
}
scanner.close();
}
}
執行結果:
測試資料
https://cpe.cse.nsysu.edu.tw/cpe/file/attendance/problemPdf/testData/uva11233a.php
後記:
其實這題還蠻煩的,字串處理真的就是CPE的重點。我花了快2個小時才完成XD。