본문 바로가기

System Programmings/C

[C] 문자열 -> 숫자 / 숫자 -> 문자열 (atoi(), atof(), strtod(), strtol(), strtoul())

반응형
atoi = Ascii to integer
atof = Ascii to float
atol = Ascii to long // 문자열 -> 숫자로 변환
#include <stdio.h>

int main()
{
	int n;
	double d;
	char *a="1234567891";
	char b[]="123456.78910";
	n=atoi(a);
	printf("%d\n", n);
	d=atof(b);
	printf("%f\n", d);
	return 0;
}
itoa = Integer to ascii
ftoa = Float to ascii // ftoa() 함수는 없다.!!
ltoa = Long to ascii // 숫자 -> 문자열
#include <stdio.h>

int main()
{
	int i=3910;
	//double d=2913.1239;

	char s[25];
	itoa(i, s, 10); // iota(바꿀 대상, 바뀐뒤 저장할 대상, 변환할 진법)
	printf("%s", s);

	//ftoa(d, s, 10);      // ftoa()함수는 없다!! OTL
	//printf("\n%s", s);
	
	return 0;
}
//직접 atoi() 함수를 만들었을 경우
#include <stdio.h>

int my_atoi(char *s);
int main()
{
	char *a="28302";
	int k=my_atoi(a);
	printf("%d", k);

	return 0;
}

int my_atoi(char *s)
{
	int sum=0;
	int dec=1;
	int i=0;
	for(i=strlen(s)-1; i>=0; i--)
	{
		sum+=(s[i]-'0')*dec; //'0'을 빼주는 이유는 아스키코드상에서의 숫자에서
		dec*=10; //48을 빼줘야 10진수인 숫자값이 나온다. 따라서 48의 아스키 코드값이 '0'을 빼준다.
	}
	
	return sum;
}
//문자열 -> 숫자 변환 //stdtol(), stdtod()
#include <stdio.h>
#include <stdlib.h>   //없으면 정상적으로 출력되지 않는다.

int main()
{
	char *s1="-12.5e04";
	char *s2="1100";
	char *endptr;
	double num1;
	long num2;
	num1=strtod(s1, &endptr);
	num2=strtol(s2, &endptr, 10); // 2는 10진수로 바꿀 대상자가 2진수임을 알려줌
	printf("문자열:%s, double형 숫자 : %lf\n", s1, num1);
	printf("문자열:%s, long형 10진수 : %ld\n", s2, num2);

	return 0;
}
// 숫자 -> 문자열로 바꾸기
#include <stdio.h>
#include <math.h>

void my_itoa(int n, char *st);
int main()
{
	char s[10];
	my_itoa(12345, s);
	printf("%s\n", s);
	
	return 0;
}

void my_itoa(int n, char *st)
{
	int count, i;
	count=(int)(log10(n)+1);

	for(i=count-1; i>=0; i--)
	{
		st[i]=(n%10)+'0';
		n=n/10;
	}
	st[count]='\0';
}


반응형