Programming Language/C2010. 10. 14. 19:37

Fcmp(str_num_comp).c

배열과 포인터를 사용하여 fcmp()를 구현해 봅니다.

/*

  실습) 하나의 포인터 변수(ptr)로 두함수 (strcmp(s,t)와 numcmp(s,t))를 다루는 함수
                fcmp(&ptr,s,t)를 만드시오.
                = main에서
                - 입력은 char s[MAX],t[MAX];
                scanf("%s %s",s,t);
                - call은 fcmp(&ptr,s,t);
                - 출력은 printf("%d\n",(*ptr)(s,t));
                
                  = function에서
                  - ps배열의 내용과 pt의 배열의 내용이 모두 숫자 문자열이면  *p = numcmp; 아니면 *p = strcmp;    
                  
*/



#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 81

void fcmp(int (**)(const char *,const char *) ,const char* ,const char* );
// 숫자열인지 체크해주고 numcmp나 strcmp를 사용해서 s가 크면 1, 같으면 0, 작으면-1을 리턴 하는 함수.

int numcmp(const char*, const char*);
// atof를 사용해 실수로 전환, 비교해주는 함수. (strcmp는 라이브러리 이용.)

int main(void){
        char s[MAX];                                                                                            //입력받을 앞 문자열.
        char t[MAX];                                                                                            //입력받을 뒤 문자열.
        int (*ptr)(const char *s,const char *t);                                    // s와 t를 인자로 가지는 함수 포인터..
        puts("비교할 문자열이나 숫자열을 입력하시오.");                          // s와 t의 값을 입력 받음.
        scanf("%s %s", &s , &t);
        fcmp(&ptr,s,t);                                                                                     // 함수 시작!
        printf("(선입력 문자열이 크면1 같으면0 작으면-1)\t%d\n",(*ptr)(s,t));  //*ptr의 값을 출력받음.
        return 0;
}


void fcmp(int (**p)(const char*,const char*),const char* s,const char* t){
        int scnt=0,tcnt=0;                      // s와 t의 인덱스들.
        (s[scnt]=='-' || s[scnt]=='.' || isdigit(s[scnt]) !=
        
        while(scnt <= strlen(s))             
        {
                if(isdigit(s[scnt]) != 0


                int i;
                i = ((s[scnt]=='.') && (s[scnt]=='-') && ( (s[scnt] >= '0')||(s[scnt]<='9')));
                ( i)? scnt++ : (*p=strcmp) ;
                //삼항 연산 '.''-''숫자'가 들어가면 scnt++. 아니면 그냥 strcmp를 해줌. 
                if(s[scnt] =='\0')
                {
                        while(t[tcnt] <= strlen(t))
                        {
                                ( (t[tcnt]=='.') && (t[tcnt]=='-') && ((t[tcnt] >= '0')||(t[tcnt]<='9')))? tcnt++ : (*p=strcmp) ;
                                //위에와 같은 삼항연산.
                                if(tcnt =='\0')
                                        *p = numcmp;  // 두 문자열이 다 숫자열이면 numcmp; 
                        }
                }
        }
}


int numcmp(const char* s, const char* t){
        return (atof(s) > atof(t))? 1 : ((atof(s) == atof(t))? 0 : -1);
        // 앞 숫자열이 크면1 같으면0 작으면-1 리턴.
}

이 글은 스프링노트에서 작성되었습니다.

'Programming Language > C' 카테고리의 다른 글

C Tutorial (트리 문자 읽기)  (0) 2010.10.14
_Mini_Project1_CALC  (0) 2010.10.14
C Tutorial ([C.L.A]. 문자열중간읽기)  (0) 2010.10.14
C Tutorial (역순화 문자열)  (0) 2010.10.14
C Tutorial (문자열크기비교)  (0) 2010.10.14
Posted by BLUE-NOTE