【2012百度之星/资格赛】E:C++ 与Java
在百度之星的貼吧里面,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++的,然后把它轉化為另一種命名格式。如果兩種都不是,那么你的程序就要報錯。轉換過程必須保持原有的單詞順序,只能改變字母的大小寫和增加或刪除下劃線。
實現代碼:
#include<iostream> #include<cstdio> using namespace std; #include<string.h>char str[104]; int main(void) {int i,len;bool low,hua,valid;while(scanf("%s",str)!=EOF){len=strlen(str);low=true , hua=false , valid=true;for(i=0;str[i]!='\0';++i){if(str[i]>='A' && str[i]<='Z')low=false; //JAVAif(str[i]=='_')hua=true; //C++}for(i=0;str[i]!='\0';++i){if(i+1<len && str[i]=='_' && str[i+1]=='_')valid=false; //C++}if(str[0]=='_' || str[len-1]=='_')valid=false; //非法if(str[0]>='A' && str[0]<='Z')valid=false; //非法if( (hua && low && valid) || (low && !hua && valid) ) //C++{for(i=0;str[i]!='\0';++i){if(i>1 && str[i]>='a' && str[i]<='z' && str[i-1]=='_')printf("%c",str[i]-32);else if(str[i]>='a' && str[i]<='z')printf("%c",str[i]);}printf("\n");}else if(hua==false && !low && valid) //JAVA{for(i=0;str[i]!='\0';++i){if(str[i]>='a' && str[i]<='z')printf("%c",str[i]);if(i+1<len && str[i]>='a' && str[i]<='z' && str[i+1]>='A' && str[i+1]<='Z'){str[i+1]+=32;printf("_");}}printf("\n");}elseputs("Error!");}return 0; } 特別提示:注意處理第一個位置和最后一個位置處的_,和第一個位置處的大寫字母以及字符串中連續的 __ 處理情況。總結
以上是生活随笔為你收集整理的【2012百度之星/资格赛】E:C++ 与Java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【2012百度之星/资格赛】D:共同狂欢
- 下一篇: 【2012百度之星/资格赛】F:百科蝌蚪