2018. 12. 28. 21:06ㆍ카테고리 없음
입력받은 문자를 배열에 저장하고 정렬하는 방법
문제
영문자 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) 방법을 활용한 사례다.
- 단, 대문자 'A'는 41이므로 순서를 비교하기 위해서는 입력할 때, 대소문자를 일정하게 유지해야 한다. 또는 61 미만의 값에 대해서는 일괄적으로 20(16진법 기준, 10진법 기준으로 32)을 더해줌으로써 대소문자 관계없이 순서를 파악할 수 있다. [본문으로]