回呼函數應用之比較兩個對象大小

來源:互聯網
上載者:User

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

typedef int (*cmp)(void const* one,void const* other); //抽象函數,比較兩個對象大小

int cmp_int(void const *one,void const *other) //具體函數比較兩個整數大小
{
 const int *a=(int*)one; //必須轉化
 const int *b=(int*)other;
 if(*a>*b) return 1;
 else if(*a==*b) return 0;
 else return -1;
}

int cmp_string(void const *one,void const *other) //具體函數比較兩個字串大小
{
 const char *str1=(char*)one;
 const char *str2=(char*)other;
 return strcmp(str1,str2);
}

void const *MaxofTwo(void const *one,void const *other,cmp func) //回呼函數,返回兩個對象最大的那個
{
 if(func(one,other)>=0) return one;
 else return other;
}

void InputException()
{
 printf("Input Exception!\n");
 exit(0);
}

void MemException()
{
 printf("Memeory Exception!\n");
 exit(0);
}

void inputstring(char *&s,int len) //輸入字串,防止緩衝區溢位,len是最多可輸入字元數
{
 int i;
 if(len<=0) InputException();
 s=(char*)malloc(sizeof(len));
 if(!s) MemException();
 char *p;
 char c;
 i=0;
 p=s;
 while((c=getchar())!='\n' && i++<len)
 {
  *p++=c;
 }
 if(i<=len) s[i]='\0';
 else s[i-1]='\0';
 fflush(stdin);
}

int main(int argc,char **argv)
{
 int a,b;
 printf("a=");
 if(scanf("%d",&a)<=0) InputException();
 printf("b=");
 if(scanf("%d",&b)<=0) InputException();
 int *c=(int*)MaxofTwo(&a,&b,cmp_int); //必須轉化
 printf("The max Value betwwen %d and %d is %d\n",a,b,*c);
 getchar(); //接收斷行符號
 char *s1,*s2;
 printf("The first string is:");
 inputstring(s1,30);
 printf("The second string is:");
 inputstring(s2,30);
 char *str=(char*)MaxofTwo(s1,s2,cmp_string);
 printf("The Max string is:");
 puts(str);
 return 0;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.