• 【2012 百度之星资格赛 E:C++ 与Java】


    E: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!


      1 #include <iostream>
      2 using namespace std;
      3 
      4 ///////////////////////////////////////////////////////////
      5 bool isLegal(string s)
      6 {
      7     bool hasSlash = false;
      8     bool hasABC   = false;
      9     
     10     bool yes;
     11 
     12     int top = 0;
     13     while (s[top] != '\0')
     14     {
     15         top++;
     16     }
     17     top--;
     18     
     19     for (int i = 0; i <= top; i++)
     20     {
     21         if (s[i] == '_')
     22         {
     23             hasSlash = true;
     24         }
     25         
     26         if (s[i] >= 'A' && s[i] <= 'Z')
     27         {
     28             hasABC   = true;
     29         }
     30         
     31     }
     32     
     33     if ( hasSlash && hasABC )
     34     {
     35         yes = false;
     36     }
     37     else
     38     {
     39         yes = true;
     40     }
     41 
     42     if (s[0] == '_')
     43     {
     44         yes = false;
     45     }
     46     if (s[top] == '_')
     47     {
     48         yes = false;
     49     }
     50 
     51     bool found = false;
     52     // judge for __
     53     for (int i = 0; i < top; i++)
     54     {
     55         if (s[i] == '_' && s[i+1] == '_')
     56         {
     57             found = true;
     58         }
     59     }
     60 
     61     if (found)
     62     {
     63         yes = false;
     64     }
     65 
     66     if (hasABC)
     67     {
     68         if (s[0] >= 'A' && s[0] <='Z')
     69         {
     70             yes = false;
     71         }
     72     }
     73     return yes;
     74     
     75 }
     76 ///////////////////////////////////////////////////////////
     77 bool isSingleString(string s)
     78 {
     79     
     80     int top = 0;
     81     while (s[top] != '\0')
     82     {
     83         top++;
     84     }
     85     top--;
     86     
     87     bool hasABC   = false;
     88     bool hasSlash = false;
     89 
     90     for (int i = 0; i <= top; i++)
     91     {
     92         if (s[i] == '_')
     93         {
     94             hasSlash = true;
     95         }
     96 
     97         if (s[i] >= 'A' && s[i] <= 'Z')
     98         {
     99             hasABC = true;
    100         }
    101     }
    102 
    103     if ( hasABC == false && hasSlash == false )
    104     {
    105         return true;
    106     }
    107     else
    108     {
    109         return false;
    110     }
    111     
    112 }
    113 
    114 ///////////////////////////////////////////////////////////
    115 bool isCppCode(string s)
    116 {
    117     int top = 0;
    118     while (s[top] != '\0')
    119     {
    120         top++;
    121     }
    122     top--;
    123 
    124     bool hasSlash = false;
    125     for (int i = 0; i <= top; i++)
    126     {
    127         if (s[i] == '_')
    128         {
    129             hasSlash = true;
    130         }
    131     }
    132 
    133     return hasSlash;
    134 }
    135 
    136 ///////////////////////////////////////////////////////////
    137 bool isJavacode(string s)
    138 {
    139     int top = 0;
    140     while (s[top] != '\0')
    141     {
    142         top++;
    143     }
    144     top--;
    145 
    146     bool hasABC = false;
    147 
    148     for (int i = 0; i <= top; i++)
    149     {
    150         if (s[i] >= 'A' && s[i] <= 'Z')
    151         {
    152             hasABC = true;
    153         }
    154     }
    155 
    156     return hasABC;
    157     
    158 
    159 }
    160 ///////////////////////////////////////////////////////////
    161 void CJavaToCpp(string s)
    162 {
    163     int top = 0;
    164     while (s[top] != '\0')
    165     {
    166         top++;
    167     }
    168     top--;
    169 
    170     for (int i = 0; i <= top; i++)
    171     {
    172         if (s[i] >= 'A' && s[i] <= 'Z')
    173         {
    174             cout << "_" ;
    175             s[i] += 32;
    176         }
    177         cout << s[i];
    178     }
    179     cout << endl;
    180 }
    181 
    182 ///////////////////////////////////////////////////////////
    183 void CCppToJava(string s)
    184 {
    185     int top = 0;
    186     while (s[top] != '\0')
    187     {
    188         top++;
    189     }
    190     top--;
    191 
    192     bool preIsSlash = false;
    193     for (int i = 0; i <= top; i++)
    194     {
    195         if (s[i] == '_')
    196         {
    197             preIsSlash = true;
    198         }
    199         else
    200         {
    201             if (preIsSlash)
    202             {
    203                 s[i] -= 32;
    204                 cout << s[i];
    205             }
    206             else
    207             {
    208                 cout << s[i];
    209             }
    210 
    211             preIsSlash = false;
    212 
    213         }
    214     }
    215 
    216 }
    217 ///////////////////////////////////////////////////////////
    218 // int main() 
    219 /* start program from here */
    220 int main()
    221 {
    222     string s;
    223     
    224     cin >> s;
    225 
    226     if(!isLegal(s))
    227     {
    228         cout << "Error!" << endl;
    229     }
    230     else if (isSingleString(s))
    231     {
    232         cout << s << endl;
    233     }
    234     else if (isJavacode(s))
    235     {
    236         CJavaToCpp(s);
    237     }
    238     else if (isCppCode(s))
    239     {
    240         CCppToJava(s);
    241     }
    242     else 
    243     {
    244         cout << "Error!" << endl;
    245     }
    246     return 0;
    247 }
    248 
    249 // end 
    250 // ism 
  • 相关阅读:
    牛客 动物园 (KMP)
    网络流模板与经典模型
    Codeforces Round #698 (Div. 2)
    CF1485X Codeforces Round #701
    CF1479B Painting the Array(贪心+DP)
    「AGC021E」Ball Eat Chameleons
    「AGC034E」 Complete Compress
    「AGC034D」 Manhattan Max Matching
    「ARC103D」 Distance Sums
    「AGC035C」 Skolem XOR Tree
  • 原文地址:https://www.cnblogs.com/ismdeep/p/2529103.html
Copyright © 2020-2023  润新知