百度之星之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
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
19天前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
59 1
|
4月前
|
Java API C++
Java JNI开发时常用数据类型与C++中数据类型转换
Java JNI开发时常用数据类型与C++中数据类型转换
153 0
|
2月前
|
人工智能 JSON 文字识别
【实操】Java+百度ocr,实现图片识别文字小工具
本文介绍了一个基于Java和百度OCR的文字识别工具,能够通过截图或上传图片实现文字识别,并使用exe4j将工具封装为exe文件以便于使用。文章详细介绍了实现过程,包括Java Swing页面布局、百度OCR配置及使用方法,以及如何将Java项目打包成jar和exe文件。此外,还提供了一些相关资源供读者参考。
35 0
【实操】Java+百度ocr,实现图片识别文字小工具
|
2月前
|
Rust 安全 Java
Java代码规范--排版,命名.:Rust能否撼动C++的王座?
系统编程是计算机科学的核心,C++长期占据主导地位,但其内存安全问题备受诟病。Rust以安全性为核心,通过所有权和生命周期概念避免了野指针和内存泄漏。此外,Rust的并发模型和日益丰富的生态系统使其成为现代系统编程的新选择,尤其在安全性和并发性方面表现出色。尽管C++依然强大,但Rust为开发者提供了更安全、易管理的选项,未来有望推动更多系统级应用的发展。
18 0
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
112 4
|
2月前
|
算法 Java Linux
Intellij Java JNI 调用 C++
Intellij Java JNI 调用 C++
31 0
|
4月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
95 3
|
4月前
|
Java C++
java和C++的标志符可以是中文(虽然不提倡)
java和C++的标志符可以是中文(虽然不提倡)
|
4月前
|
Java C++
Java和C++的一些区别
Java和C++的一些区别
|
4月前
|
Java API Android开发
Java通过JNI调用C++的DLL库
Java通过JNI调用C++的DLL库
27 0