#4 - 문자의 정렬 [쉬움]*

2018. 12. 28. 21:06카테고리 없음

728x90

입력받은 문자를 배열에 저장하고 정렬하는 방법


문제

영문자 3개를 입력받고, 이 중 알파벳 순서가 가장 먼저인 영문자를 출력하는 프로그램을 작성하시오.


우선 알파벳 순서를 비교하기 위해서는 ASCII 코드의 개념을 알아야 한다.

 

http://www.unicode.org/charts/PDF/U0000.pdf

 

다음 링크의 표에 제시된 것처럼 각 문자는 그에 맞는 코드를 가지고 있다.

사용자는 코드의 크기를 비교하는 것으로 문자의 순서를 비교할 수 있다.

를 들어, 알파벳 'a'와 'b'는 16진법으로 61, 62이므로 숫자가 더 작은 문자의 순서가 더 먼저임을 알 수 있다.[각주:1]



기본적으로 main함수에서 scanf문을 통해 3개의 문자열을 ch배열에 저장하는 것으로 시작한다.

예를 들어, kor을 입력하면 ch[0]='k', ch[1]='o', ch[2]='r'이 되는 것.



이론적으로는 num(3) 크기의 배열을 하는 것으로 충분하다.

그래서 num 크기의 배열을 선언하면 결과는 제대로 나오지만 자꾸 위와 같은 오류가 난다.

인터넷을 검색해보니 포인터의 문제라고 하는데, 최소 크기의 배열을 선언하면서 해결할 수 있는 방법을 찾으면 수정해보려 한다.

그 전까지는 num + 1 크기의 배열을 선언하여 오류없이 완성하고자 한다.




* if와 else문을 통해 값 비교를 직접 수행한다.

** 문자의 개수가 조금만 늘어나도 극도로 많은 작업량을 요하기 때문에 효율적이지 못하다.




* 때문에 배열을 통해 정렬하는 방법을 선택했다.

** 거품 정렬(Bubble sort)을 통해 정렬했다.




* 거품 정렬 이외에도 다른 여러 종류의 정렬 방법이 있다.

** 이것은 선택 정렬(selection sort) 방법을 활용한 사례다.



  1. 단, 대문자 'A'는 41이므로 순서를 비교하기 위해서는 입력할 때, 대소문자를 일정하게 유지해야 한다. 또는 61 미만의 값에 대해서는 일괄적으로 20(16진법 기준, 10진법 기준으로 32)을 더해줌으로써 대소문자 관계없이 순서를 파악할 수 있다. [본문으로]
728x90