程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 轉換表

轉換表

編輯:關於C

 


如果把想做的事可以縮小在某一范圍內,可以利用轉換表。通常是常用的數字范圍,也可以不是,下面的例子用的就不是數字范圍

可以將待調用的函數指針插入表中,用選項作為表的索引,轉移表實現每個可能都是一樣快。

轉移表通過實例實現,比用干巴巴的文字說明更有意思

下面的例子通過做加減乘除函數的例子來說明轉移表的用法

#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)還可以手動減小取值的范圍

分享到:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved