zoukankan      html  css  js  c++  java
  • 【2012百度之星资格赛】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)'_'不能放在头部

                                2)多个'_'不能同时出现

                                3)’_'不能在尾部

                                4)首字母一定是小写


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    char str[424];
    char ans[424]; //答案存放数组 
    bool _java,_cpp;
    bool _isquery() //可以看做cpp 可以看做 java  (仅有小写字母构成) 
    {
        int len=strlen(str);
        if(str[0]<'a'||str[0]>'z'||str[len-1]=='_')//第一个不是小写字母,最后一个是'_' 
        	return false;
        for(int i=0 ; i< len ; ++i)
        {
            if((str[i]>='A'&&str[i]<='Z')||str[i]=='_')
            	return false;
    
        }
        return true;
    
    }
    
    bool _iscpp()
    {
    
        int len=strlen(str);
        if(str[0]<'a'||str[0]>'z'||str[len-1]=='_')//首字母不是小写字母或者最后一个是 '_' 
        	return false;
        	
        bool flag=false; //标记 有 '_' 出现,下一个要变大写字母 
        int cnt=0;
        for(int i=0 ; i< len ; ++i)
        {
            if(str[i]>='A'&&str[i]<='Z')//有大写字母不是cpp 
            	return false;
            if(str[i]=='_')
            {
                if(str[i+1]=='_')//两个'_'连续出现 
                	return false;
                flag=true;
                continue; //如果有 '_' 则不复制 执行下一轮 
            }
            if(flag)
            {
                flag=false;
                ans[cnt++]=toupper(str[i]);
            }
            else
            	ans[cnt++]=str[i];
    
        }
    
        ans[cnt]=0;
        return true;
    
    }
    
    bool _isjava()
    {
    
        int len=strlen(str);
        if(str[0]<'a'||str[0]>'z'||str[len-1]=='_')
            return false;
        bool flag=false;
        int cnt=0;
        for(int i=0 ; i< len ; ++i)
        {
    
            if(str[i]=='_')
              return false;
            if(str[i]>='A'&&str[i]<='Z')
               flag=true;
    
            if(flag)
            {
                ans[cnt++]='_';
                ans[cnt++]=tolower(str[i]);
                flag=false;
            }
            else
           	 ans[cnt++]=str[i];
    
        }
        ans[cnt]=0;
        return true;
    }
    
    int main()
    {
    
       while(scanf("%s",str)!=EOF)
        {
    
            int _query=false;
            
            if(_isquery())
            {
                puts(str);
                continue; //进入下一轮循环 (while) 
            }
    
            _java=_cpp=false;
            _java=_isjava();
            if(_java)
            {
                puts(ans);
                continue;
            }
            _cpp=_iscpp();
            if(_cpp)
            {
                puts(ans);
                continue;
            }
    
            if(!_java&&!_cpp)
                   puts("Error!");
    
        }
    
     return 0;
    
    }



  • 相关阅读:
    Codeforces Round #311 (Div. 2)题解
    firefox 被劫持hao123 主页
    国有航空为啥“放下身段”读春秋?
    ORACLE中常见SET指令
    最大概率法分词及性能測试
    怎样利用JDBC连接并操作Oracle数据库
    hdu5240
    代码调试过程中easy遇到的问题
    最简单的基于FFmpeg的AVDevice样例(读取摄像头)
    FPGA 功耗结构设计
  • 原文地址:https://www.cnblogs.com/secbook/p/2654998.html
Copyright © 2011-2022 走看看