[C++] Atoi함수 구현
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;
}
실행 결과
부호를 붙이지 않으면
양수로 취급하여 출력