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 |