아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog


Language/Java / JSP

2014. 9. 12. 01:30

컴퓨터를 만지는 사람이라면 한번쯤은 들었을만한 아스키(ASCII) 코드에 대해서 포스팅합니다.
아스키(ASCII) 코드에 대해서 MS 사이트에 아래와 같이 설명되어 있더군요.

컴퓨터의 언어는 숫자입니다. 따라서 프로그램이나 다른 컴퓨터와 통신하려면 컴퓨터에서 문자와 기호가 해당 숫자 표현으로 변환되어야 합니다.

 1960년대에 표준화의 필요성이 대두되면서 ASCII(American Standard Code for Information Interchange)(아스키로 발음)가 개발되었습니다. ASCII 표에는 128개의 숫자가 해당 문자에 할당되어 있습니다. ASCII를 통해 컴퓨터 간에 또는 컴퓨터와 프로그램 간에 데이터를 저장하고 교환할 수 있습니다.

아스키(ASCII) 코드는 언어에 상관없이 모두 사용이 가능합니다. 위의 설명대로 숫자로 이루어져있기 때문에 C, Java, Python, HTML 등등 언어에 상관없이 아스키 코드를 알고 있으면 종종 개발할때 많은 도움이 되기도 합니다.

아스키코드는 128개의 숫자를 사용한다고 하였는데, 개발을 할때 늘 그렇듯이 시작은 항상 0 입니다. 그렇기 때문에 0 ~ 127 까지 사용할수 있다고 보면 됩니다.

물론 확장형 아스키 코드라고해서 128개 이상의 아스키코드를 사용하기도 하는데, 이 확장형 아스키 코드는 OS별로 순서가 다르기때문에 멀티 플랫폼 환경의 프로그램을 개발해야 한다고 하면 지양해야 하기도 합니다.

[아스키 코드표]

[출처 : www.asciicharstable.com]

다음은 아스키 코드를 활용하여 알파벳 A부터 소문자 z까지 콘솔에 출력하는 간단한예제 입니다.

public class StringGlow {

	public static void main(String[] args) {

		
		// 알파벳 시작 문자열 : A
		char aString = 65 ;
		
		
		
		
		while(true){
			
			// 특수문자 시작시 알파벳 소문자로 고정
			if(aString == 91)
				aString = 97 ;

			
			// 아스키 코드를 문자형으로 변환
			String str = String.valueOf(aString) ;
			
			
			System.out.println(str) ;
			
			
			
			// 아스키값 증가
			aString++ ;
			
			
			// 알파벳 소문자 z가 끝날시 종료 처리
			if(aString > 122)
				break ;
			
		}
		

	}

}

1. 대문자 Z, 소문자 a 사이에는 특수문자가 포함되어 있기때문에 아스키 코드가 91일때 97로 강제 고정.
2. 소문자 z(122)보다 크면 while 빠져나옴
3. 아스키코드를 문자형으로 변경하는 것은 String.valueOf 사용

문자들을 순차적(A, B, C, D, ...)으로 부여해야 할때 아스키 코드를 이용하면 편합니다.

'Language/Java / JSP' Related Articles


물론 단번에 코드를 본다면 좋기야 하겠지만 장기적으로 봤을때

혼자풀어보기 -> 힌트 -> 코드보기 순으로 공부하시는게 실력 향상에 큰 도움이 됩니다!

힌트를 보고 천천히 생각을 거쳐서 문제를 풀어보시고

답안을 확인해보세요

더보기

scanf를 통해 사용자로부터 char형 문자를 입력받고

아스키코드를 나타내기 위해선 char문자를 정수형으로 출력해주면 아스키코드 값을 볼 수 있다.

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
출력예시
아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
출력예시

더보기

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
출력예시
아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
출력예시
#include <stdio.h>

int main(void) {

 char ch;

 printf("문자를 입력하시오: ");		

 scanf("%c", &ch);		//캐릭터형으로 문자를 출력받고

 printf("아스키 코드값=%d\n", ch);		//정수형으로 캐릭터형을 출력

 return 0;

}

더 많은 C언어 글이 궁금하다면?

https://chuinggun.tistory.com/category/C%EC%96%B8%EC%96%B4

[C/C++] ASCII 값을 이용하여 문자열 내 알파벳, 대소문자, 공백, 숫자 식별(분류)하기 + 대소문자 변환하기

안녕하세요 JollyTree입니다 (•̀ᴗ•́)و

C/C++에서 char 자료형의 문자 변수는 0에서 127 사이의 정수 값을 저장할 수 있습니다. 이는 미국 ANSI(American Standard Code for Information Interchange)에서 표준화한 정보교환용 7비트 부호체계인 ASCII 코드에 해당되며 영문 키보드로 입력할 수있는 모든 기호들이 할당되어 있어 있습니다.

※ ASCII 코드에 대한 자세한 설명은 위키백과를 참고해 주세요. 

아래 표와 같이 ASCII 코드값에는 십진수(Dec.)기준으로 숫자(0~9)가 48번에서 57번에 할당되어 있고, 알파벳 대문자(A~Z)는 65번~90번, 소문자(a~z)는 97번에서 122번에 할당되어 있습니다. 

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
출처 : http://www.lookuptables.com(www.asciitable.com/)

만약 사용자가 입력한 문자의 ASCII 코드 값이 0~9이면 숫자, 65~90이면 알파벳 대문자, 97~122이면 알파벳 소문자에 해당됩니다. 문자형(char) 이므로 '0', '1', a', 'b'와 같이 작은 따옴표를 이용하여 값을 변수에 저장할 수 있는데 컴퓨터 내부적으로 ASCII 코드 테이블을 참고하여 48, 49, 97, 98의 값으로 처리 합니다.

예제로 표현하면 보다 쉽게 정리가 됩니다. 아래 예제는 char형 변수 a1~a4에 각각  한 문자씩 '0', '1', 'a', 'b'를 대입하고 출력한 결과와 동일한 변수 a1~a4에 각각 48, 49, 97, 98의 ASCII 코드 테이블상에 있는 번호를 대입한 결과를 비교합니다. 실행결과 동일한 결과가 출력되는데 이는 컴퓨터가 ASCII 코드 체계를 사용하기 때문입니다.

#include <stdio.h>

int main()
{
    char a1 = '0';
    char a2 = '1';
    char a3 = 'a';
    char a4 = 'b';


    printf("a1 = %c\n", a1);
    printf("a2 = %c\n", a2);
    printf("a3 = %c\n", a3);
    printf("a4 = %c\n", a4);

    a1 = 48;
    a2 = 49;
    a3 = 97;
    a4 = 98;

    printf("\n");
    printf("a1 = %c\n", a1);
    printf("a2 = %c\n", a2);
    printf("a3 = %c\n", a3);
    printf("a4 = %c\n", a4);
}

실행결과(Output):

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog

아래 그림은 Visual Studio 2019에서 a1~a4까지의 변수값을 Watch한 내용입니다. Value 컬럼을 보면 48 '0', 49 '1', 97 'a', 98 'b'의 값들이 보일텐데요. 대입은 각각 '0', '1', a', 'b' 형태로 했지만 내부적으로 ASCII 코드 값도 함께 보여주고 있습니다.

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog

다시 본론으로 돌아가서,

C/C++ 언어는 사용자가 입력된 문자가 알파벳인지, 숫자인지, 공백인지를 식별해주는 isalnum(), isalpha(), isupper(), isdigit() 등의 라이브러리 함수를 지원합니다. 이런 라이브러리 함수를 사용하면 아주 편리하게 사용자가 입력한 문자의 유형을 구분할 수 있습니다.

이 부분은 나중에 정리 하기로 하고, 우선은 ASCII 코드 값에 대한 이해가 필요할 것 같아 ASCII 코드 체계를 이용한 알파벳 대소문자, 숫자, 공백 등을 식별하는 방법을 먼저 기록합니다.

ASCII 코드값을 이용한 알파벳 대소문자, 숫자, 공백 등 식별하기 예제(Example):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

#include <stdio.h>

#include <string.h>

int main() 

{

char input[50= "";

char c;

printf("문자열을 입력하세요(예;\"Hello World! 123AbcDEf !@#@\"):");

gets_s(input);

for (int i = 0; i < strlen(input); i++)

{

= input[i];

//입력한 문자가 소문자인가 ?

if (c >= 'a' && c <= 'z')  

printf("%c 는 알파벳 소문자\n", c);

//그렇지 않으면 대문자인가 ?

else if (c >= 'A' && c <= 'Z')

printf("%c 는 알파벳 대문자\n", c);

//그렇지 않으면 숫자인가 ?

else if (c >= '0' && c <= '9')

printf("%c 는 숫자\n", c);

//그렇지 않으면 공백인가?

else if (c == ' ')

printf("%c 는 공백\n", c);

//기타인가 ?

else

printf("%c 는 기타 문자\n", c);

}

//알파벳 대문자는 소문자로, 소문자는 대문자로 변경

//ASCII 코드 테이블 참조

for (int i = 0; i < strlen(input); i++)

{

= input[i];

if (c >= 'a' && c <= 'z')

putchar(c - 32);

else if (c >= 'A' && c <= 'Z')

putchar(c + 32);

else

putchar(c);

}

return 0;

}

cs

실행결과(Output):

아스키 코드 알파벳 출력 - aseuki kodeu alpabes chullyeog
ASCII 코드값을 이용한 알파벳 대소문자, 숫자, 공백 식별 결과

ASCII 코드 테이블 상에서 알파벳 대문자는 65~90번, 소문자는 97~122번이라고 앞에서 언급했는데요. 테이블을 보면 정확히 32 크기의 간격으로 서로 떨어져 있습니다. 따라서 소문자를 대문자로 변경하기 위해 c-32를 하였고, 반대로 대문자를 소문자로 변경하기 위해서는 c+32를 하였습니다. 이 또한 C/C++에서는 toupper(), tolower() 함수로 대소문자 변경을 지원하는데 이부분도 다음에 기록하도록 하겠습니다.

생각했던 것보다 글이 길어졌습니다. 긴글 읽어주셔서 감사합니다. 이상 JollyTree였습니다 (•̀ᴗ•́)و