程序翻译
题目链接:ybt 入门到进阶模拟赛 Day2 T2
题目大意
有两种语言,一种是第一个单词小写开头,其它的大写开头;另一种是全小写开头,用 _ 分割。
单词长度至少为 1,要你实现把一种语言转成另一种,如果两个语言都不是需报告错误。
思路
这道题转换还好,看看代码就好了,主要恶心的是如何判断错误。
出了出现下划线和大写就不行。
两个下划线在一起就不行。
下划线在最前面或最后面都不行。
开头大写字母也不行。
代码
#include<cstdio>
#include<cstring>
using namespace std;
char c[10001];
int n;
bool Java___, C___, wrong;
int main() {
freopen("java_c.in", "r", stdin);
freopen("java_c.out", "w", stdout);
scanf("%s", c + 1);
n = strlen(c + 1);
for (int i = 1; i <= n; i++) {
if (c[i] == '_') {
Java___ = 1;
if (c[i - 1] == '_') {
wrong = 1;
}
}
else if (c[i] >= 'A' && c[i] <= 'Z') {
C___ = 1;
}
}
if ((C___ && Java___) || (c[1] >= 'A' && c[1] <= 'Z') || (c[1] == '_') || wrong || (c[n] == '_')) {//把每个有可能的错误都判断
printf("Error!");
return 0;
}
if (Java___) {//C++转Java
bool big = 0;
for (int i = 1; i <= n; i++) {
if (c[i] == '_') {
big = 1;
}
else {
if (big) {
printf("%c", c[i] - 'a' + 'A');
big = 0;
}
else printf("%c", c[i]);
}
}
}
else {//Java转C++
for (int i = 1; i <= n; i++)
if (c[i] >= 'A' && c[i] <= 'Z') {
printf("_%c", c[i] - 'A' + 'a');
}
else printf("%c", c[i]);
}
return 0;
}