[C언어] 문자열을 숫자로 바꾸기 - 2 (strtol, strtoul, strtod)
문자열을 숫자 값으로 바꿔주는 함수.
입력 값으로 문자열을 넣으면 숫자 값이 출력된다.
문자열을 정수형으로 반환해주는 함수
헤더파일 stdlib.h 에 포함되어있다.
atoi는 int, atol은 long int 값을 반환한다.
https://www.cplusplus.com/reference/cstdlib/atoi/?kw=atoi
https://www.cplusplus.com/reference/cstdlib/atol/?kw=atol
문자열을 실수형(double)로 반환해주는 함수.
헤더파일 stdlib.h 에 포함되어있다.
https://www.cplusplus.com/reference/cstdlib/atof/?kw=atof
정수를 문자열로 바꿔주는 함수.
이 함수는 c 표준함수가 아니기 때문에 컴파일러에 따라 제공해 줄수도 아닐 수도 있다.
itoa함수의 기능은 sprintf함수로 충분히 대체 가능하다..만 그래도 한번 알아보자.
https://www.cplusplus.com/reference/cstdlib/itoa/
A.
char* itoa(int value, char* result, int base) {
// check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;
do {
tmp_value = value;
value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value );
// Apply negative sign
if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0';
while(ptr1 < ptr) {
tmp_char = *ptr;
*ptr--= *ptr1;
*ptr1++ = tmp_char;
}
return result;
}
출처 : http://www.strudel.org.uk/itoa/
#include <stdio.h>
#include <stdlib.h>
int main()
{
char * s = "2022.2022";
int num_int;
long int num_long;
double num_double;
num_int = atoi(s);
num_long = atol(s);
num_double = atof(s);
printf("atoi result : %d\n", num_int);
printf("atol result : %ld\n", num_long);
printf("atof result : %f\n", num_double);
return 0;
}
/*
출력
atoi result : 2022
atol result : 2022
atof result : 2022.202200
*/
#include <stdio.h>
#include <stdlib.h>
char * itoa(int value, char* result, int base);
int main(){
char buff[100];
int number = 2022;
// 10진수
itoa(number, buff, 10);
printf("%s\n", buff);
// 2진수
itoa(number, buff, 2);
printf("%s\n", buff);
// 16진수
itoa(number, buff,16);
printf("%s\n", buff);
return 0;
}
char * itoa(int value, char* result, int base) {
// check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;
do {
tmp_value = value;
value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
} while ( value );
// Apply negative sign
if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0';
while(ptr1 < ptr) {
tmp_char = *ptr;
*ptr--= *ptr1;
*ptr1++ = tmp_char;
}
return result;
}
/*
출력
2022
11111100110
7e6
*/
문자열에 문자나 띄어쓰기가 포함되어 있을 경우, 앞에서부터 숫자로 인식되는 부분까지만 변환해준다.
ex) "112경찰" -> atoi -> 112, "소방차119" -> atoi -> 0(변환할 값이 없음), "123 45" -> atoi -> 123
16진수나 2진수 등의 숫자는 10진수로 변환하여 바꿔줘야하는 불편함이 있다.
이러한 단점을 해결한 함수로 strtol, strtoul 같은 함수가 있다.
[C언어] 문자열을 숫자로 바꾸기 - 2 (strtol, strtoul, strtod) (0) | 2022.05.31 |
---|---|
[C언어] 문자를 기준으로 문자열 자르기 (strtok, strpbrk) (0) | 2022.05.29 |
[C언어] 문자열에서 한글만 추출하기 (0) | 2021.11.08 |
[C언어] 문자열에서 영어만 추출하기 (0) | 2021.11.07 |
[C언어] 문자열에서 숫자만 추출하기 (5) | 2021.11.06 |