[[프로그래밍_NOTE]]/Bit 전형 기출문제

atof() [01.04.24]

갑빠돌격기 2008. 8. 19. 17:02

문자열을 가지고 float형으로 출력하는 함수 프로그래밍.


/************************************
 written SeungHwan
 File of MyAtof()
 2008.08.19
************************************/
#include<stdio.h>
#include<math.h>

void Count_MyAtof(char* ptr , int* pmark , int* piValueCount , int* pdValueCount)
{
 if(*ptr == '-')
 {
  *pmark = 1;
  ptr++;
 }
 while((*ptr) != NULL)
 {
  while((*ptr) != '.')
  {//정수부분
   (*piValueCount)++;
   ptr++;
  }
  ptr++; //소수점 지나가기
  while((*ptr) != NULL)
  {//소수부분
   (*pdValueCount)++;
   ptr++;
  }
  ptr++;
 }
}

float MyAtof(char* ptr , int mark , int iValueCount , int dValueCount)
{
 float result=0.0;
 
 if(mark==1)
  ptr++;

 for( ; iValueCount>0 ; iValueCount--)
 {//정수부 계산
  result += (*ptr-'0')* (float)pow(10,(iValueCount-1));
  ptr++;
 }
 ptr++; //소수점 지나가기
 for( int i=1 ; dValueCount>0 ; i++ , dValueCount--)
 {//소수부 계산
  result += (*ptr-'0')* (float)pow(0.1 , i);
  ptr++;
 }
 return mark==0 ? result : result*(-1) ;
}

void main()
{
 int mark=0;
 int iValueCount=0;
 int dValueCount=0;
 char temp[1024] = {"-12.93"};

 Count_MyAtof(temp , &mark , &iValueCount , &dValueCount);
 printf("%lf\n" , MyAtof(temp , mark, iValueCount , dValueCount));
}