2014년 7월 9일 수요일

2870 수학숙제

문자열 중에 숫자들을 추출하여 오름차순으로 출력하는 프로그램이다.
처음에는 단순히 atoi, atol 함수를 이용해 숫자를 추출해내려 했었는데, 오답이 났다.
이유는 문자열의 길이가 최대 100이라 숫자의 길이 또한 100자리가 될 수 있었던 것이다.
숫자가 100자리 라는것은 long long 형도 뛰어 넘는다는 의미이다.

그래서 두번째 방법으로 숫자를 문자열의 형태로 뽑이내기로 했다.
해당 번지의 문자가 숫자인 경우, 다음에 알파벳이나 개행이 나타날때 까지 배열에 삽입한다. 이때 맨앞이 0으로 시작하면 제외시킨다. 만약 시작도 끝도 0이면 0으로 삽입해야 한다.

그렇게 삽입을 마치면 정렬을 해야 하는데, 문자열을 숫자처럼 취급하여 정렬을 하려면 먼저 두 문자열의 길이를 비교해서 긴 쪽을 크다고 판단한다. 만약 길이가 같으면 strcmp함수로 평범하게 문자열 비교를 하면된다.

이때 c언어 레퍼런스 함수의 qsort 함수를 이용하였는데, qsort 함수의 형식은 다음과 같다.
void qsort(void *arr,size_t num,size_t size,int (*cmp)(void *x,void *y));

arr은 말그대로 데이터를 담은 배열을 의미한다.
len은 정렬할 데이터의 숫자이다.
size는 정렬할 조각 하나의 크기이다. 여기선 문자열의 길이 101(널문자 포함)을 넣어준다.
cmp 는 두 조각을 비교할 함수의 포인터를 의미한다. 두개의 포인터 변수를 입력받아 int 를 리턴해야 한다.


참고 사이트

소스

댓글 없음:

댓글 쓰기