百度之星之E:C++ 与Java

简介: 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!

【答案】

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
 
int main(void)
{
    string strSample;
    string strCplus;
    string strJava;
    string strTransRslt;
    
    int strLen = 0;
    bool bCPlusJava = false; 
    int iCnt = 0;
    
    string strTransFun(string strSource, bool bCJava);
    
    cin >> strSample;
    
    if( strSample[0] < 'a' || strSample[0] >'z' || strSample[strSample.length()-1] =='_')
    {
        cout << "Error!" << endl;
        return -1;
    }
    else
    {
        strLen = strSample.length();
        for(int k = 0; k < strLen; k++)
        {
            if( (strSample[k] >= 'A') && (strSample[k] <='Z') && strSample.find('_') != string::npos)
            {
                cout << "Error!" << endl;
                return -1;
            }
            if( !( (strSample[k] >= 'a' && strSample[k] <= 'z') || (strSample[k] >= 'A' && strSample[k] <= 'Z')) && strSample[k] != '_')
            {
                cout << "Error!" << endl;
                return -1;
            }
        }
        
        if( strSample.find("__") != string::npos)
        {
            cout << "Error!" << endl;
            return -1;
        }
 
        if( strSample.find('_') != string::npos ) 
        {
            bCPlusJava = true;
            strTransRslt = strTransFun(strSample,bCPlusJava);
        }    
        else
        {
            for( int i = 0; i < strLen; i++)
            {
                if(strSample[i] >= 'A' && strSample[i] <= 'Z') 
                {
                    bCPlusJava = false;
                    strTransRslt = strTransFun(strSample,bCPlusJava);
                    break;
                }
                if(strSample[i] >= 'a' && strSample[i] <= 'z')
                {
                    iCnt++;
                }
            }
            if(iCnt == strLen)
            {
                strTransRslt = strSample;
            }
        }    
    }
    cout << strTransRslt << endl;
    return 0;
}
 
string strTransFun(string strSource, bool bCJava)
{
    string strReslt;
    int pos = 0;
    if(bCJava)
    {
    
        for( int i = 0; i < (int)strSource.length(); i++)
        {
            if(strSource[i] == '_')
            {
                pos = i;
                strSource.erase(pos,1);
                strSource[pos] = toupper(strSource[pos]);
            }
        }    
        strReslt = strSource;
    }
    else
    {
        for( int i = 0; i < (int)strSource.length(); i++)
        {
            if(strSource[i] >= 'A' && strSource[i] <= 'Z')
            {
                pos = i;
                strSource[pos] = tolower(strSource[pos]);
                strSource.insert(pos,1,'_');
            }
        }
        strReslt = strSource;
    }
    return strReslt;
}

注意:

1)字符串的处理,主要用到了left、insert、toupper等函数。

2)测试数据很重要,开头下划线(与题意有关,可能于C++命名规范不符合,网友有质疑的)、下划线与大些字母并存、结尾下滑线、多个下划线(处理技巧存在两个下划线)都要判断出错,输出"Error!"。

3)应用isapha函数可能G++(百度之星连接北大的编译器)可能报错,不知何故。


作者:铭毅天下
原文:https://blog.csdn.net/laoyang360/article/details/7621129
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
29天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
11天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
17天前
|
Java C++ Kotlin
进制转换在C/C++/Java/Kotlin中的应用(详细版)(下)
进制转换在C/C++/Java/Kotlin中的应用(详细版)
7 1
|
17天前
|
存储 人工智能 Java
进制转换在C/C++/Java/Kotlin中的应用(详细版)(上)
进制转换在C/C++/Java/Kotlin中的应用(详细版)
8 0
|
25天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
14 1
|
2月前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
44 0
|
2月前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
32 0
|
3月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
47 10
|
3月前
百度搜索:蓝易云【什么是HTTP长轮询?】
现在,HTTP长轮询逐渐被WebSocket等更高效的实时通信技术所替代,但了解HTTP长轮询仍然有助于理解实时数据推送的基本原理。
86 9
|
3月前
|
移动开发 Shell Linux
百度搜索:蓝易云【Shell错误:/bin/bash^M: bad interpreter: No such file or directory】
将 `your_script.sh`替换为你的脚本文件名。运行此命令后,脚本文件的换行符将被转换为Linux格式,然后就可以在Linux系统上正常执行脚本了。
34 8