41 문자열과 숫자를 서로 변환하기

프로그램을 만들다 보면 내용은 숫자이지만 형태는 문자열인 경우를 자주 만나게 됩니다. 예를 들면 다음과 같이 텍스트 파일에 문자와 숫자가 섞인 상태로 저장될 수 있습니다.

Hello, world!
10
35.28

이 문자열을 int, float형으로 변환하는 방법과 int, float형 숫자를 문자열로 변환하는 방법에 대해 알아보겠습니다.

41.1 문자열을 정수로 변환하기

먼저 문자열을 정수로 바꾸는 방법입니다. atoi 함수를 사용하면 10진법으로 표기된 문자열을 정수로 바꿀 수 있으며 함수 이름은 ASCII string to integer에서 따왔습니다(stdlib.h 헤더 파일에 선언되어 있습니다).

  • atoi(문자열);
    • int atoi(char const *_String);
    • 성공하면 변환된 정수를 반환, 실패하면 0을 반환

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

ascii_string_to_integer.c

#include <stdio.h>
#include <stdlib.h>    // atoi 함수가 선언된 헤더 파일

int main()
{
    char *s1 = "283";   // "283"은 문자열
    int num1;

    num1 = atoi(s1);        // 문자열을 정수로 변환하여 num1에 할당

    printf("%d\n", num1);   // 283

    return 0;
}

실행 결과

283

atoi 함수에 문자열을 넣어주면 정수가 반환됩니다. 단, 문자열은 정수로 되어있어야 하며 알파벳 영문자, 특수 문자가 포함되면 해당 문자부터는 변환을 하지 않습니다. 또한, 처음부터 숫자가 아니면 0으로 변환됩니다. 다음은 정수에 영문자, 특수 문자가 섞여있을 때의 변환 예입니다.

283a → 283
283a30 → 283
283! → 283
283!30 → 283
a30 → 0
!30 → 0
abc → 0
!@# → 0