C 프로그래밍에서는 문자열에 포함된 숫자 부분만 추출해 정수로 변환해야 하는 경우가 자주 발생합니다. 예를 들어 "The Matrix(1999)"처럼 제목 뒤에 연도가 붙은 문자열에서 연도 값만 분리하려면 strchr() 함수와 atoi() 함수를 조합하면 간단하게 처리할 수 있습니다.
1단계: strchr()로 왼쪽 괄호 '(' 위치 찾기
먼저 strchr() 함수를 사용해 문자열에서 왼쪽 괄호 '('가 처음 나타나는 위치를 찾아 그 이후 부분에 대한 포인터를 얻습니다.
char *name="The Matrix(1999)";
char *ps;
ps=strchr(name,'(');
2단계: 괄호 안의 문자들을 char 배열에 복사하기
다음으로 반복문을 돌며 괄호 () 내부의 각 문자를 하나씩 char 배열에 옮겨 담고, 마지막에 널 문자('\0')를 붙여 올바른 문자열로 완성합니다.
char y[5]=""; int p;
for (p=1;p<strlen(ps+1);p++) {
y[p-1]=ps[p];
}
y[4]='\0';
3단계: atoi()로 문자열을 정수로 변환하기
마지막으로 atoi() 함수를 사용해 완성된 문자열을 정수로 변환한 뒤 출력합니다.
year=atoi(y);
printf("year=%d",year);
응용 방법
이 과정을 함수로 만들어 두면 여러 데이터에 재사용할 수 있으며, 여기에 원하는 필터 조건을 적용하면 2008년 이전에 개봉한 모든 영화의 문자열 배열을 손쉽게 생성할 수 있습니다. 참고로 실무 환경에서는 입력 유효성 검사를 위해 strtol() 같은 더 안전한 함수를 사용하는 것도 고려해 보세요.