어렵지는 않은데 경우 따지는게 복잡했다. 파이썬이면 그냥 isalpha 이런거 써서 쉽게 할 수 있는데 씨쁠쁠은 모르겠다. 그래서 그냥 하나하나 다 확인했음.
자바는 소문자랑 대문자만 있어야 하고 c++은 소문자랑 _만 있어야 하므로 이 외의 문자가 나올 경우 false로 둔다. 그리고 둘 다 false라면 그때는 error를 띄우게 코드를 짰다.
그런데 틀렸다ㅠ 다시 보니 빠진 경우가 있다. 예를 들어 a__ 이런것도 내 코드에서는 맞았다고 뜨는데 여기서는 틀렸다고 둬야한다. 그래서 _가 입력으로 들어왔을 때 _가 연속으로 있지는 않은지, 그리고 끝에 붙어있지는 않은지 확인해줬다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
bool isJava = true, isCpp = true;
if (s[0] < 97 || 122 < s[0]){
isJava = false; isCpp = false;
}
for(int i = 1; i < s.length(); i++){
if(s[i] == '_'){
if(s[i-1] == '_' || i == s.length()-1)
isCpp = false;
isJava = false;
}
else if (65 <= s[i] && s[i] <= 90){
isCpp = false;
}
else if (s[i] < 97 || 122 < s[i]){
isJava = false; isCpp = false;
}
}
string r = "";
if(!isJava && !isCpp){
printf("Error!");
}
else if(isJava){
for(int i = 0; i < s.length(); i++){
if (65 <= s[i] && s[i] <= 90){
r += "_"; r += s[i]+32;
}
else
r += s[i];
}
}
else if(isCpp){
for(int i = 0; i < s.length(); i++){
if(s[i] == '_'){
r += s[i+1]-32;
i++;
}
else
r += s[i];
}
}
cout << r;
return 0;
}
코드가 정말 길다 (코드 길면 이상하게 좀 불안하더라)
'백준' 카테고리의 다른 글
2810 컵홀더 (0) | 2019.11.02 |
---|---|
15904 UCPC는 무엇의 약자일까? (0) | 2019.11.02 |
11383 뚊 (0) | 2019.11.02 |
1049 기타줄 (0) | 2019.11.01 |
10867 중복 빼고 정렬하기 (0) | 2019.11.01 |