반응형

C : 문자열 숫자 변환

작성계기

이전부터 정리를 하려 했으나 게으름으로 이제야 정리를 하게 되었다. 문자열을 숫자로 바꿔야 하는 경우는 굉장히 많기 때문에 유용하다. 한편으로는 간단하게 직접 똑같은 기능을 하는 함수를 간단히 만들 수 있다(본인은 atoi()를 늦게 알게 되어서 필요할때 직접 구현을 하였었다.


atoi()

헤더 파일: stdlib.h

선언 구조: int atoi(const char* str);

리턴: 정상적으로 작동될 경우 정수를 반환하고, 실패할 경우 아무것도 반환하지 않는다.

부가 설명: 함수 이름은 a는 문자열, i는 int의 첫 글자를 따서 문자열을 정수로 바꾼다는 의미로 지어진 이름이다. 따라서 atoi() 역이 되는 함수는 itoa()가 되어야 한다.


직접 구현해보기

atoi()와 같은 기능을 하는 함수를 간단히(?) 다음과 같이 구현할 수 있다.


// 한문자를 정수 숫자로 반환하는 함수
#include <string.h>

int char2int(const char ch)
{
    char index[10] = "0123456789";
    int t;
    for(t=0; t<10; ++t)
    {
        if(index[t] == ch)
            return t;
    }
    return -1;
}

// 10의 제곱수를 반환하는 함수
int pow10(const int n)
{
    int tmp;
    int num = 1;
    for(tmp = n; tmp>0; --tmp)
        num *= 10;
    return num;
}

// atoi()와 같은 역할을 하는 함수
int str2int(const char* str)
{
    int strLen = strlen(str);
    int op = 1;          // 부호
    int n = strLen;    // 자리수
    int num = 0;       // 결과값
    int t = 0;
    for(t=0; t<strlen; ++t)
    {
        int tmp = 0;
        if(0== t && '-' == str[0])
        {
            op = -1;
            --n;
            continue;
        }
        if(-1 == tmp)
            return;
        num += tmp*pow10(n);
    }
    return num*op;
}

조금 차이지만 여전히 C++보다 C가 더 불편하니 가능하면, 표준함수에서 제공하는 것을 소중히 여기도록 하자.

반응형

+ Recent posts