转换表


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

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

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

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

#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)还可以手动减小取值的范围

 

posted @ 2013-08-05 19:39  jlins  阅读(257)  评论(0编辑  收藏  举报