C++ 與Java
時間限制: 2000ms 記憶體限制: 65536kB
描述
在百度之星的貼吧裡面,Java的愛好者和C++的愛好者總是能為這兩種語言哪個更好爭論上幾個小時。Java的愛好者會說他們的程式更加整潔且不易出錯。C++的愛好者則會嘲笑Java程式很慢而且代碼很長。
另一個Java和C++愛好者不能達成一致的爭論點就是命名問題。在Java中一個多個單詞構成的變數名應該按照如下格式命名:第一個單詞的開頭用小寫字母,其餘單詞都以大寫字母開頭,單詞與單詞之間不加分隔字元,除單詞的首字母之外的字母一律使用小寫。例如:javaIdentifier, longAndMnemonicIdentifier, name, bAIDU.
與Java不同C++的命名全都使用小寫字母,在單詞和單詞之間使用“_”來作為分隔字元。例如:c_identifier, long_and_mnemonic_identifier, name (當名字中只有一個單詞的時候,Java與C++的命名是相同的), b_a_i_d_u.
你的任務就是寫一個程式能讓C++和Java程式相互轉化。當然轉換完成的程式中的變數名也要符合其語言的命名規則,否則的話是不會有人喜歡你的轉換器的。
首先你要做的就是寫一個變數名轉換器。給出一個變數名,你要先檢測是Java的還是C++的,然後把它轉化為另一種命名格式。如果兩種都不是,那麼你的程式就要報錯。轉換過程必須保持原有的單詞順序,只能改變字母的大小寫和增加或刪除底線。
輸入
輸入有且僅有一行,是一個變數名,其中包含字母和底線,長度不超過100。
輸出
如果輸入的是Java變數名那麼輸出它對應的C++形式。如果是C++的則輸出對應的Java的形式。如果兩種都不是就輸出“Error!”。
範例輸入
輸入範例1:
long_and_mnemonic_identifier
輸入範例2:
anotherExample
輸入範例3:
i
輸入範例4:
bad_Style
範例輸出
輸出範例1:
longAndMnemonicIdentifier
輸出範例2:
another_example
輸出範例3:
i
輸出範例4:
Error!
import java.io.BufferedInputStream;import java.util.*;public class T5 {public static void main(String[] args) {Scanner sc=new Scanner(new BufferedInputStream(System.in));while(sc.hasNextLine()){String s=sc.nextLine();fun(s);}}public static void fun(String s){StringBuffer bu=null;loop:if(s.charAt(0)>='a'&&s.charAt(0)<='z'){if(!s.contains("_")){bu=new StringBuffer(s);for(int i=0;i<s.length();i++){if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){bu.insert(i,"_");}}System.out.println(bu);}else{bu=new StringBuffer(s);for(int i=0;i<s.length();i++){if(s.charAt(i)=='_'){if(s.charAt(i+1)>='A'&&s.charAt(i+1)<='Z'){System.out.println("ERROR");break loop;}else{bu.replace(i+1,i+2,String.valueOf((char)(s.charAt(i+1)-32)));}}}System.out.println(String.valueOf(bu).replace("_",""));}}else System.out.println("ERROR");}}