2 minute read

Atoi의 개념



  • 문자열을 정수로 변환한다.
  • 문자열 초반의 공백은 무시한다.(아스키 코드로는 9~13, ‘‘는 아스키 코드로 32)
  • (+) 또는 (-) 부호는 최대 1개 까지만 올 수 있다.
  • 숫자를 읽기 시작해서 다른 문자가 나오기 직전까지만 숫자를 읽는다.


코드 및 주석


[선언 및 main]

int main()
{
    char *text = new char[10];
    
    // input text data to char
    printf("input number text : ");
    scanf_s("%s" , text, 10);

    // output Atoi result
    printf("output Atoi result : %d", Atoi(text));
}


[Atoi 함수 정의]

/// <summary>
/// Define Atoi function
/// </summary>
/// <param name="_text_data">input char text data</param>
/// <returns></returns>
int Atoi(char* _text_data) {
    int result = 0, positive = 1;

    // check whitespace
    while ((*_text_data == ' ') || (*_text_data == '\n') || (9 <= *_text_data && *_text_data <= 13))
        _text_data++;

    // check + or -
    if (*_text_data == '+' || *_text_data == '-') {
        if (*_text_data == '-')
            positive = -1;
        _text_data++;
    }

    // change text data to int data
    while ('0' <= *_text_data && *_text_data <= '9') {
        // _data * 10 is make number of digits
        result *= 10;
        // reason why doing [ - '0' ], 
        // cuz input text data is entered as an ASCII code value,
        // so, you can get input number through subtract 0(ASCII value 48)
        result += (*_text_data - '0') * positive;
        _text_data++;
    }
    return result;
}


[전체 코드]

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// declaration Atoi function
int Atoi(char *);

int main()
{
    char *text = new char[10];
    
    // input text data to char
    printf("input number text : ");
    scanf_s("%s" , text, 10);

    // output Atoi result
    printf("output Atoi result : %d", Atoi(text));
}

/// <summary>
/// Define Atoi function
/// </summary>
/// <param name="_text_data">input char text data</param>
/// <returns></returns>
int Atoi(char* _text_data) {
    int result = 0, positive = 1;

    // check whitespace
    while ((*_text_data == ' ') || (*_text_data == '\n') || (9 <= *_text_data && *_text_data <= 13))
        _text_data++;

    // check + or -
    if (*_text_data == '+' || *_text_data == '-') {
        if (*_text_data == '-')
            positive = -1;
        _text_data++;
    }

    // change text data to int data
    while ('0' <= *_text_data && *_text_data <= '9') {
        // _data * 10 is make number of digits
        result *= 10;
        // reason why doing [ - '0' ], 
        // cuz input text data is entered as an ASCII code value,
        // so, you can get input number through subtract 0(ASCII value 48)
        result += (*_text_data - '0') * positive;
        _text_data++;
    }
    return result;
}


실행 결과


부호를 붙이지 않으면


atoi_02

양수로 취급하여 출력


- 부호 추가


atoi_03


Top