재원이의 프로그램은 가장 먼저 변수명을 입력으로 받은 뒤, 이 변수명이 어떤 언어 형식인지를 알아내야 한다.
Java변수명은 C++로 C++변수명은 Java변수명으로 바꾼다.
만약 C++형식과 Java형식 둘 다 아니라면, 에러를 발생시킨다. 변수명을 변환할 때, 단어의 순서는 유지되어야 한다.
[Java변수명 짓는 법]
1. 첫 단어는 소문자로 쓰고, 다음 단어부터는 첫 문자만 대문자로 쓴다.
2. 또, 모든 단어는 붙여쓴다.
javaIdentifier, longAndMnemonicIdentifier, name, bAEKJOON
[C++변수명 짓는 법]
1. 소문자만 사용한다.
2. 단어와 단어를 구분하기 위해서 밑줄('_')을 이용한다.
c_identifier, long_and_mnemonic_identifier, name, b_a_e_k_j_o_o_n
입력
첫째 줄에 변수명이 주어진다.
영어 알파벳과 밑줄('_')로만 이루어져 있고, 길이는 100을 넘지 않는다.
출력
입력으로 주어진 변수명이 Java형식이면, C++형식으로 출력하고, C++형식이라면 Java형식으로 출력한다.
둘 다 아니라면 "Error!"를 출력한다.
...
구성 : 알파벳, '_'
#include <iostream>
#include <string>
using namespace std;
int main() {
int ind = 0;
bool java = false, cpp = false, error = false;
string name;
char answer[205];
cin >> name;
for(int i=0; i < name.size(); i++) {
if('A' <= name[i] && name[i] <= 'Z') { //Java
if(!i || cpp) { //첫문자 대분자, c++
error = true; break;
}
answer[ind++] = '_';
answer[ind++] = name[i] - 'A' + 'a';
java = true;
}
else if(name[i] == '_') { //c++
if(!i || java || i == name.size() - 1 || name[i + 1] == '_') {
error = true; break;
}
answer[ind++] = name[++i] + 'A' - 'a';
cpp = true;
}
else answer[ind++] = name[i];
}
cout << ((error) ? "Error!" : answer);
}
50%정도까지는 성공했는데 어떠한 예외가 더 있을까요....