1. 程式人生 > >結構體和函式指標實現加減乘除

結構體和函式指標實現加減乘除

構思:
建立結構體,結構體的成員中有一個成員為函式指標,賦值後可指向各個演算法的地址;
當輸入add 1 2時,指標陣列分別指向add,1和2;
隨後進行字串比較,判斷進入哪一個演算法;
實現:

char optr;
int(*pf)(int, int) = NULL;      //函式指標
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; }
 struct operation
{
    char *name;           
    int
(*pf)(int, int); //結構體的成員為一個函式指標 char c; }ops[] = { { "add", add, '+' }, { "sub", sub, '-' }, { "mul", mul, 'X' } }; void math_man(char *buf[], int num) { int a = atoi(buf[1]); int b = atoi(buf[2]); int r = pf(a, b); printf("%s%c%s=%d\n", buf[1], optr,buf[2
], r); } void do_action(char *pbuff[], int num) { int i = 0; for (i = 0; i < sizeof(ops) / sizeof(ops[0]); i++) { if (strcmp(pbuff[0], ops[i].name) == 0) //判斷字串 { pf = ops[i].pf; //函式指標指向 optr = ops[i].c; //optr指向算術符 break; } } math_man(pbuff,num); } void
parse(char *buff1) { int num = 0;; int i = 0; char *str[3]; //陣列指標 指向三個字串的地址 int status = 0; for (i = 0; buff1[i] != '\0'; i++) { if (!isspace(buff1[i])&&(status == 0)) //記錄字串的位置 { status = 1; //可以讓buff1[0] 指向add buff1[1] buff1[2]分別指向後面的兩個數字 str[num++] = buff1+i; } else if(isspace(buff1[i])) //遇到空格則下一個位置是下一個字串的起始位置,並截斷上一個字串的末尾 { status = 0; buff1[i] = '\0'; } } do_action(str, num); } int main() { char buff[200] ; while (1) { printf("input>:"); scanf("%[^\n]%*c",buff); parse(buff); memset(buff, 0x00, sizeof(buff));//每次讀取後進行初始化以免發生衝突 } system("pause"); return 0; }

相關推薦

結構函式指標實現乘除

構思: 建立結構體,結構體的成員中有一個成員為函式指標,賦值後可指向各個演算法的地址; 當輸入add 1 2時,指標陣列分別指向add,1和2; 隨後進行字串比較,判斷進入哪一個演算法; 實現:

C程式設計--結構結構函式之間的引數使用)

結構體型別(掌握點): 建立結構體型別 定義結構體型別變數 初始化結構體和引用結構體變數(3種方法,見下) 使用結構體陣列 結構體指標(重要) 指向結構體變數的指標 指向結構體陣列的指標 程式碼案例

結構函式指標初始化

/** * 為結構體中的指標陣列賦值 */ #include <stdio.h> typedef struct test { void (*p)(void); void (*q)(void); void (*y)(void); }t

C++類 給結構成員 函式指標 賦值

myStruct標頭檔案 myStruct.h class CMyClass; struct {  int nFlag;  void (CMyClass::*myinit)(int n);  void (CMyClass::*myopen)(int n,void* arg)

結構函式指標賦值的兩種方法

/** 02. * 為結構體中的指標陣列賦值 03. */ 04. 05.#include <stdio.h> 06. 07.typedef struct test 08.{ 09. void (*p)(void); 10.

C語言結構定義函式指標的簡單高效的使用例子

對於大型專案來說,struct的使用會使整個程式碼更加簡約,閱讀起來和寫起來都更加簡便,以後就要多嘗試這種用法了。下面是一個簡單例子,可以參考一下。 #include <stdio.h>

qemu 中關鍵結構函式理解

關鍵結構 ./target-arm/translate.c(DisasContext存在於該檔案中,專門為TB塊的生成而服務) typedef struct DisasContext { target_ulong pc; int is_jmp;

位操作實現乘除四則運算

tle 參與 nbsp pre 圖片 操作數 整數 spa 或操作 解決方案 需要熟練掌握一些常見的位操作實現,具體為: 1)常用的等式:-n=~(n-1)=~n+1 2)獲取整數n的二進制中最後一個1:n&(-n)或者n&~(n-1)如:n=010100,

c語言設計簡單計算器實現乘除運算

      編寫程式的目的就是使程式有他應用的地方,編寫一個簡單的計算器來實現我們計算的目的。           利用swich  case 語句和迴圈結構來實現簡單程式的編寫。利用選擇語句來進行輸入的選

資料結構__不含括號的乘除法混合運算

這個程式我一共寫了5個檔案,4個是標頭檔案,最後1個則是main函式的cpp檔案。 第一個檔名為head.h 用於包含一些基本的標頭檔案,如下所示: #pragma once #include<iostream> #include<stdlib.h> #inclu

使用位運算實現乘除

在不使用+,-,*,/,四則運算子號的情況下,通過基本位運算實現加減乘除四則運算。 1. C++中使用位運算實現加法 首先,我們通過對x和y進行&位運算,得出每一位上的進位。然後對x和y進行^位運算,得出沒有加進位的和。最後將所得的和當做新的x,所得的進位往

實現乘除任意組合的語法解析

給定一個字串如:2/(3+4))*(3-1)+6-8 ,用程式解析出來,輸出最終的值。這是個AST 語法解析問題,最直觀的是建立一顆語法樹,然後遍歷語法樹來獲得最終的效果。如下圖,建立這麼一個語法樹,然後廣度優先搜尋,進行操作就能得到最終的結果。    但是,其實我們有更方便的方法去做

使用面向物件的程式設計思想實現乘除運算

指令碼1Main 函式的程式碼: using System; using System.Collections.Generic; using System.Linq; using System.Tex

c#簡單版計算機實現乘除

①在檢視的工具箱中給form1視窗新增如下: ②combobox1的屬性ltems賦值 並頁面載入時設定combobox1無法編輯,只讀; ③button1的text屬性賦值"="; ④textbox3設定readonly屬性,賦值true,讓textbox3為只

利用棧實現乘除冪功能

如何用棧來實現加減乘除冪的運算呢?應考慮下面幾點。 1.分別用一個棧x存符號,另一個棧y存數值。 2.遇到數字就壓棧,遇到符號ch要比較棧頂的符號與當前的符號ch,編寫一個判別函式prev,若能進行運算,則返回真,不能返回假.以下是判別函式的幾種情況: (1)如果棧頂符

【演算法】位元位計算(A+B Problem)-位運算子介紹、位運算實現乘除

問題描述 問題:計算A+B,不適用“+”運算子(LintCode 1.A + B Problem) 注意:A B均為32位整數,可使用位元位計算 解決思路 演算法示例 程式碼如下:(通過LintCode測試) class Solution

BigDecimal這個類來實現乘除

package com.mmall.util; import java.math.BigDecimal; / **  *敲程式碼的wqq * / public class BigDecimalUti

位運算-實現乘除

res oid font ont 分享圖片 != family highlight args 基本性質:1:~n=-(n+1),比如:~3=-4     2:獲取整數n的二進制串中最後一個1:-n&n=~(n-1)&n  

使用位操作實現乘除運算

前言 在實際應用中一定要注意邊界問題,包括上邊界和下邊界 注意: 位操作中常用的公式 a=n&(n-1);//去掉n中最右邊的1; b=n&(-n);//得到n中最右邊的1 -n==~

java程式碼例項 使用switch實現簡易的計算器(實現乘除)

import java.util.Scanner; /* * 使用switch實現簡易的計算器(實現加減乘除); */ public class test { public static v