在 Java 中,由多个单词组成的标识符的命名规则如下:第一个单词是以小写字母开头,接下来的每一个单词以大写字母开头,分隔符不允许使用。其他字母都是小写的。
在 C++ 中,只用小写字母命名标识符。用下划线 _ 来分隔单词(每个单词长度至少为 111)。
当只有一个单词时,用 Java 和 C++ 是统一的。
现在需要写一个程序来相互翻译 Java 和 C++ 的程序。翻译后的标识符必须符合它的命名规则。如果这个标识符既不是 Java 标识符也不是 C++ 标识符,你的程序需要报告错误。
解
判断是 C++ 或 Java 通过大写和下划线判断。
然后就是判断是否两个都不是,情况有这几种:
同时有 C++ 和 Java 的两个特点。
开头是下划线或大写。
几个下划线连在一起或最后是下划线。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s, anss;
int lx, nextdx;
int main(){
freopen("java_c.in","r",stdin);
freopen("java_c.out","w",stdout);
cin >> s;
if((s[0] >= 'A' && s[0] <= 'Z') || s[0] == '_') {
printf("Error!");
return 0;
}
for(int i = 0; i < s.size(); ++i){
if(s[i] == '_'){ //是c++
if(nextdx == 1){
printf("Error!");
return 0;
}
if(lx == 0) lx = 1;
else if(lx == 2){
printf("Error!");
return 0;
}
nextdx = 1;
}
else if(s[i] >= 'A' && s[i] <= 'Z'){ //是java
if(lx == 0) lx = 2;
else if(lx == 1){
printf("Error!");
return 0;
}
char k = s[i]-65+97;
anss = anss + "_" + k;
}
else{
if(nextdx == 1){
nextdx = 0;
char k = s[i]+65-97;
anss = anss + k;
}
else anss = anss + s[i];
}
}
if(nextdx == 1){
printf("Error!");
return 0;
}
cout << anss;
}