문제
리뷰
아스키 코드를 이용해서 풀었다.
공백은 32 , 숫자는 '0'과 '9'는 48 ~ 57. 대문자 65 ~ 90, 소문자 97 ~ 122 이다.
찾아보니까 대소문으로 조건으로 비교하기 보다는
if(st[i] <= 'A' && st[i] <= 'Z'){} // 대문자
else if(st[i] <= 'a' && st[i] <= 'z'){} // 소문자
string STL에 있는 islower 와 isupper를 쓰면 간결하게 짤 수 있었다.
코드
영 맘에 안들지만 내가 처음에 맞은 코드다.
#include <iostream>
#include <string>
using namespace std;
int main(void){
string st;
getline(cin, st);
for(int i = 0; i < st.size(); i++){
if(st[i] == ' ') cout << ' ';
else if(st[i] <= '9'){
cout << st[i];
}
else if(st[i] <= 'Z'-13){ // 대문자
st[i] += 13;
cout << st[i];
}else if(st[i] <= 'Z'){
st[i] = st[i] + 13 - 26;
cout << st[i];
}else if(st[i] <= 'z'-13){ // 소문자
st[i] += 13;
cout << st[i];
}else{
st[i] = st[i] + 13 - 26;
cout << st[i];
}
}
return 0;
}
코드2
질문게시판의 다른 분들의 코드를 보며 고쳐본 코드다.
#include <iostream>
#include <string>
using namespace std;
int main(void){
string st;
getline(cin, st);
int len = st.length();
for(int i = 0; i < len; i++){
if(isupper(st[i])){ // 대문자
if(st[i] + 13 > 'Z') st[i] = st[i]+13-26;
else st[i] += 13;
}else if(islower(st[i])){ // 소문자
if(st[i] + 13 > 'z') st[i] = st[i]+13-26;
else st[i] += 13;
}
cout << st[i];
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
접미사 배열 백준 11656번 (0) | 2020.08.27 |
---|---|
네 수 백준 10824 (0) | 2020.08.27 |
에디터 백준 1406번 c++ (0) | 2020.08.26 |
스택 수열 백준 1874번 (0) | 2020.08.26 |
2007년 백준 1924번 (0) | 2020.08.25 |