转换表
如果把想做的事可以缩小在某一范围内,可以利用转换表。通常是常用的数字范围,也可以不是,下面的例子用的就不是数字范围
可以将待调用的函数指针插入表中,用选项作为表的索引,转移表实现每个可能都是一样快。
转移表通过实例实现,比用干巴巴的文字说明更有意思
下面的例子通过做加减乘除函数的例子来说明转移表的用法
#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)还可以手动减小取值的范围
分享到:
补充:软件开发 , C语言 ,