如果把想做的事可以縮小在某一范圍內,可以利用轉換表。通常是常用的數字范圍,也可以不是,下面的例子用的就不是數字范圍
可以將待調用的函數指針插入表中,用選項作為表的索引,轉移表實現每個可能都是一樣快。
轉移表通過實例實現,比用干巴巴的文字說明更有意思
下面的例子通過做加減乘除函數的例子來說明轉移表的用法
#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)還可以手動減小取值的范圍
分享到: