| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖
标题:实现多态.
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
 问题点数:0 回复次数:6 
实现多态.
程序代码:
/*
标准库文件ctype.h描述的各种字符分类函数。这些函数很简单,它们对满足条件的字符返回非0值,
否则返回0值。下面是有关函数:
isalpha(c)
c是字母字符
isdigit(c)
c是数字字符
isalnum(c)
c是字母或数字字符
isspace(c)
c是空格、制表符、换行符
isupper(c)
c是大写字母
islower(c)
c是小写字母
iscntrl(c)
c是控制字符
isprint(c)
c是可打印字符,包括空格
isgraph(c)
c是可打印字符,不包括空格
isxdigit(c)
c是十六进制数字字符
ispunct(c)
c是标点符号
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef int (*typefun)(int);
typefun* ctype[]={isalpha,
                isdigit,
                isalnum,
                isspace,
                isupper,
                islower,
                iscntrl,
                isprint,
                isgraph,
                isxdigit,
                ispunct
               };
typedef enum {is_alpha,
             is_digit,
             is_alnum,
             is_space,
             is_upper,
             is_lower,
             is_cntrl,
             is_print,
             is_graph,
             is_xdigit,
             is_punct,
             }types;

int gettype(char str, types type);
int main(void)
{
        printf("%d",gettype('1',is_digit));
        printf("%d",gettype('a',4));

        system("pause");
        return 0;
}

int gettype(char str, types type)
{
         typefun* mytype=ctype;
         return   mytype[type](str);
}
搜索更多相关主题的帖子: 多态 
2008-01-02 11:21
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
呵呵,这个函数可以这么用
int i;
for(i=0;i<11;i++)
    if(gettype(ch,i))break;

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-01-02 12:23
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
2008-01-02 12:36
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
知音少之又少啊...
2008-01-02 19:03
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
这样容易反而麻烦,并且有一定问题存在。

—>〉Sun〈<—
2008-01-02 19:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 比较适合多源文件编译的代码,并写头文件              */
/* 修改的以前写的代码,好像有点无聊,以后再写好点       */


//---------------------------------//
/* 简单的队列程序 */

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

#define QUEUEMAX 100    // 队列最大长度

typedef struct {
    int data;
    int pri;
} Item;

typedef struct node
{
    Item item;
    struct node * next;
} Node;

typedef struct queue
{
    Node * front;
    Node * rear;
    int count;
} Queue;

//---------------------------------------------//


int Itin(Queue * pq);             // 初始化
int FullQueue(Queue * pq);        // 队列是否已满
int EmptyQueue(Queue * pq);       // 队列是否为空
int QueueCount(Queue * pq);       // 返回队列长度
int DelQueue(Queue * pq, Item * item);       // 删除节点
int AddQueue(Queue * pq, Item * item);       // 添加节点
int EndQueue(Queue * pq);                    // 结束,删除所有节点

//---------------------------------------------//
typedef int (* Fun_A)(Queue *);   [color=Blue]/* 函数指针类型 */
typedef int (* Fun_B)(Queue *, Item *);      /* 函数指针类型 */

Queue queue_at;

struct Queue_fun{
    Item item;
    Queue * list;

    Fun_A itin;
    Fun_A full;
    Fun_A empty;
    Fun_A count;
    Fun_A end;
    Fun_B add;
    Fun_B del;
};

struct Queue_fun Qfun = {        /* 包含需要用到的函数的结构 */
             0, 0,
             &queue_at, Itin, FullQueue, EmptyQueue, QueueCount,
             EndQueue,  AddQueue, DelQueue
};[/color]

//----------------------------------------------//

int main(void)
{
    int k;
    extern struct Queue_fun Qfun;   // 引用声明
   
    Qfun.itin(Qfun.list);

    do{
        do{
            fputs("Input data: ", stdout);
            k = scanf("%d", &Qfun.item.data);
            while(getchar() != '\n')
                continue;
        }while(k != 1);
   
        do{
            fputs("Input pri: ", stdout);
            k = scanf("%d", &Qfun.item.pri);
            while(getchar() != '\n')
                continue;
        }while(k != 1);
        
        Qfun.add(Qfun.list, &Qfun.item);
        
        do{
            fputs("是否结束添加 [Y/N]... ", stdout);
            k = getchar();
            if(k != '\n')
                while(getchar() != '\n')
                    continue;
            k = tolower(k);
        }while(k != 'y' && k != 'n');

    }while(k != 'n' && !Qfun.full(Qfun.list) );
   
    while(Qfun.del(Qfun.list, &Qfun.item) )
    {
        printf("data: %d     par: %d\n", Qfun.item.data, Qfun.item.pri);
    }

    getchar();
    return 0;
}

//---------------------------------------------//

int Itin(Queue * pq)            // 初始化队列 */
{
    pq->front = pq->rear = NULL;
    pq->count = 0;
    return 1;
}

int FullQueue(Queue * pq)        // 队列是否已满
{
    return (pq->count >= QUEUEMAX);
}

int EmptyQueue(Queue * pq)       // 队列是否为空
{
    return (pq->count == 0);
}

int QueueCount(Queue * pq)       // 返回队列长度
{
    return pq->count;
}

int DelQueue(Queue * pq, Item * item)         // 删除节点
{
    Node * temp;
    if(EmptyQueue(pq))
        return 0;
    *item = pq->front->item;
    temp = pq->front;
    pq->front = pq->front->next;
    free(temp);
    pq->count--;
    if(pq->count == 0)
        pq->rear = NULL;
    return 1;
}

int AddQueue(Queue * pq, Item * item)            // 添加节点
{
    Node * qnew = NULL;
    if(FullQueue(pq))
        return 0;
    qnew = (Node *)malloc(sizeof(Node));
    if(qnew == NULL)
    {
        fputs("无法分配足够内存!\n", stderr);
        exit(1);
    }
    qnew->next = NULL;
    qnew->item = * item;
    if(EmptyQueue(pq))
    {
        pq->front = qnew;
        pq->rear = qnew;
    }
    else
    {
        pq->rear->next = qnew;
        pq->rear = qnew;
    }
    pq->count++;
    return 1;
}

int EndQueue(Queue * pq)             // 结束,删除所有节点
{
    Item * p;
    while(DelQueue(pq, p));
    return 1;
}


[[italic] 本帖最后由 cosdos 于 2008-1-2 20:58 编辑 [/italic]]

—>〉Sun〈<—
2008-01-02 20:19
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
知音难觅呀!
2008-01-02 20:28
快速回复:实现多态.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017444 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved