wjavm2   4년 전

런타임에러 왜나는지 정말 모르겠어요.. 제발 봐주세요ㅠㅠㅠ

nahwasa   4년 전

30번째줄에서 i는 0~9인데 i-'0'을 char로 ok함수에 넣으십니다.

존재하지 않는 char이죠.

wjavm2   4년 전

혹시 int를 char로 바꿀때 왜 i+'0' 하고, char을 int로 바꿀때 i-'0'하는지 아시나요??

아스키코드를 이용한다는건 알았는데 왜 문자 0을 빼는지 이해가 가지 않아요!!!!

nahwasa   4년 전

간단합니다!

char는 아스키코드표를 기준으로 하고, int는 그냥 정수이죠.

[0]이라는 숫자를 나타내면 int는 그냥 0이고 char는 아스키코드표에서 '0' 입니다.

그럼 문자 '0'도 아스키코드표에서 0번째에 있으면 좋겠는데,

아스키코드표 0번 인덱스의 값은 null이고, '0'은 아스키코드표에서 48번 인덱스에 있습니다.

--

그리고 48~57번 인덱스에 걸쳐 '0'~'9'가 차례대로 들어가있습니다.

따라서 '0' 이라고 하면 이건 사실 프로그램은 48로 바꿔서 인식하고 있는겁니다.

 그럼 '0' - 48 = 0 이 되겠죠.

근데 48번이라고 외우고 다니기 귀찮잖아요?

그러니 '0' - '0' = 48 - 48 = 0이 되는겁니다.

그리고 숫자들이 전부 순서대로 들어가있으니

'5'-'0' = 53 - 48 = 5 이런식이 되는겁니다.

--

만약 아스키코드표에서 '0'~'9'가 순서대로 들어있지 않았다면 이런식으로 하지 않았겠죠.

--

비슷한 방식으로 'a'~'z' = 96~122 (숫자 몰라도 됨)

'A'~'Z' = 65~90 입니다.

즉, 'A' + 31을 하면 'a'가 되겠죠?

그럼 대문자 + 31 = 소문자 이런식으로 되는겁니다.

근데 31을 외울순 없잖아요? 그러니

char upperCase = 'A';

char lowerCase = upperCase + 'a'-'A';

이게 대문자를 소문자로 바꾸는것이고, 'A'-'a'를 더하면 소문자를 대문자로 바꾸겠죠.

--

결론은 한마디로 아스키코드표 몇번 인덱스에 뭐가있는지 외우고 다니기 귀찮으니

+ 또는 -에 문자를 넣어서 연산하는겁니다.

가끔 보시면 그냥 '0' - 48 이런식으로 쓰시는분들도 많이 계십니다.

wjavm2   4년 전

설명 진짜 감사합니다!! 

덕분에 이해가 잘가네요ㅎㅎ

코드도 i+'0'으로 바꿔주니 잘 돌아가용~~ 감사합니다!!!>_<

댓글을 작성하려면 로그인해야 합니다.