转换表


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

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

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

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

#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 @   jlins  阅读(262)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示