• 转换表



    如果把想做的事可以缩小在某一范围内,可以利用转换表。通常是常用的数字范围,也可以不是,下面的例子用的就不是数字范围

    可以将待调用的函数指针插入表中,用选项作为表的索引,转移表实现每个可能都是一样快。

    转移表通过实例实现,比用干巴巴的文字说明更有意思

    下面的例子通过做加减乘除函数的例子来说明转移表的用法

    #include <stdio.h>

    #include <string.h>

    #define M 4

    int add(int a, int b);

    int sub(int a, int b);

    int mul(int a, int b);

    int div(int a, int b);

    //此为转移表

    int (*oper_func[])(int, int) = {

    add, sub, mul, div

    };

    /*指针函数数组声明返回INT

    型指针数组*/

    char oper_sequence[M][10] = {

    "add", "sub","mul", "div"

    };

    int main()

    {

    char oper[10];

    int seq;

    int a,b;

    int result;

    int i;

    printf("Operator:");

    scanf("%s",oper);

    printf("a:");

    scanf("%d",&a);

    printf("b:");

    scanf("%d",&b);

    for(i=0; i<M; i++)

    {

    if(strncmp(oper_sequence[i], oper, 3) == 0)

    seq = i;

    }

    /* strncmp

    功 能: 串比较

    用 法: int strncmp(char *str1,char *str2, int maxlen);

    说明:此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,

    返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])[1]

    */

    result = oper_func[seq](a, b);

    printf("result is %d/n", result);

    return 0;

    }

    int add(int a, int b)

    {

    return a+b;

    }

    int sub(int a, int b)

    {

    return a-b;

    }

    int mul(int a, int b)

    {

    return a*b;

    }

    int div(int a, int b)

    {

    return a/b;

    }

    说明

    (1)转移表还可以插入默认的选项,只不过需要人工编码。

    (2)还可以手动减小取值的范围

  • 相关阅读:
    java面向对象第三章
    java基础(9)
    java基础(8)
    java基础(7)
    java基础(6)
    Java(20)file i/o
    Java(19)JDBC
    Java(18) 集合框架
    Java(17)异常
    Java(16)接口
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3239022.html
Copyright © 2020-2023  润新知