c언어

C언어 - 두 단어의 크기를 비교하기(숫자일경우 숫자로 비교)

pi92 2021. 3. 5. 08:50
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <ctype.h>  // isdigit() 함수 사용하기 위해
#include <string.h>
#include <stdlib.h>

#define NUM 1        // 상태가 숫자 문자열인 경우
#define CHARCT 2    // 상태가 숫자 문자열이 아닌 경우


int numcmp(const char*, const char*); // 함수 numcmp 선언
void fcmp(int**, char*, char*);

int main()
{
    int (*ptr)(const char* , const char* );
	char s[80], t[80];
    int i = 0, j = 0;
	 // 변수 ptr 선언

    printf("입력 값(s) :");
    scanf("%s", s);
    printf("입력 값(t) :");
    scanf("%s", t);

        fcmp(&ptr, s, t);    // 함수 fcmp 콜

		printf("%d\n", ptr(s, t));
	return 0;
}


int numcmp(const char* ps, const char* pt)  // 함수 numcmp 정의 
{
    float a, b;

    a = atof(ps);
    b = atof(pt);

    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}



void fcmp(int** ptr, char* s, char* t) // 함수 fcmp 정의
{
   int cond;
   int **p = ptr;
   char* ps = s;
   char* pt = t;
   int pointcheck = 0;


   cond = NUM;

   if (*ps == '-')
       ps++;

   if (*ps == '.')
       cond = CHARCT;

   while ((*ps != '\0') && (cond == NUM))
   {
       if (isdigit(*ps) != 0 || (*ps == '.')) {
           ps++;
       }

       else {
           cond = CHARCT;
       }

   }

  if (*pt == '-')
    pt++;

  while ((*pt != '\0') && (cond == NUM))
  {
      if (isdigit(*pt) != 0 || (*pt == '.')) {
          pt++;
      }

      else {
          cond = CHARCT;
      }
  }

  if (cond == NUM)
    *p = numcmp;
  else
    *p = strcmp;
}