当前位置: 首页 > web >正文

C/C++表驱动法

第1章 原始底代码

#include <cstdio>
#include <cstring>static void Func1(const char *str);int main() {Func1("Sun");return 0;
}void Func1(const char *str){if(strcmp(str, "Mon") == 0){printf("Monday\n");} else if(strcmp(str, "Tue") == 0){printf("Tuesday\n");} else if(strcmp(str, "Wed") == 0){printf("Wednesday\n");} else if(strcmp(str, "Thur") == 0){printf("Thursday\n");} else if(strcmp(str, "Fri") == 0){printf("Friday\n");} else if(strcmp(str, "Sat") == 0){printf("Saturday\n");} else if(strcmp(str, "Sun") == 0){printf("Sunday\n");} else {printf("Unknown day\n");}
}

第2章 方法一

#include <cstdio>
#include <cstring>typedef struct {char *weekAbbreviation;char *weekFullName;
} TWeek;static TWeek arr[] = {{"Mon", "Monday"},{"Tue", "Tuesday"},{"Wed", "Wednesday"},{"Thu", "Thursday"},{"Fri", "Friday"},{"Sat", "Saturday"},{"Sun", "Sunday"}
};static void Func2(const char *str){for(int i = 0; i < sizeof (arr)/ sizeof (arr[0]); i++){if(strcmp(arr[i].weekAbbreviation, str) == 0){printf("%s\n", arr[i].weekFullName);}}
}int main(int argc, char **argv){Func2("Thu");return 0;
}

第3章 方法2

#include <cstring>
#include <cstdio>// 枚举:代表一周七天
typedef enum {Mon,   // 默认为 0Tue,   // 1Wed,   // 2Thu,   // 3Fri,   // 4Sat,   // 5Sun,   // 6TotalDays  // 自动为 7,可以用于循环边界等用途
} TWeekEnum;// 结构体:关联枚举与星期全称
typedef struct {TWeekEnum weekAbbreviation;const char *weekFullName;  // 更安全地使用 const char*
} TWeek;// 静态全局数组:枚举到全名的映射
static TWeek array[] = {{Mon, "Monday"},{Tue, "Tuesday"},{Wed, "Wednesday"},{Thu, "Thursday"},{Fri, "Friday"},{Sat, "Saturday"},{Sun, "Sunday"}
};// 根据枚举值输出对应的星期全名
static void Func3(TWeekEnum weekEnum) {for (int i = 0; i < TotalDays; ++i) {if (array[i].weekAbbreviation == weekEnum) {printf("Day: %s\n", array[i].weekFullName);return;}}printf("Unknown day.\n");
}// 测试函数
int main() {Func3(Mon);  // 输出 MondayFunc3(Wed);  // 输出 WednesdayFunc3(Sun);  // 输出 SundayFunc3((TWeekEnum)10);  // 输出 Unknown day.return 0;
}

第4章 方法3

3.1 大杂烩

#include <cstring>
#include <stdio.h>typedef void (*pFunc)(void);typedef struct{const char *weekAbbreviation;pFunc func;
}TWeek;static void func1(void){printf("Monday\n");
}static void func2(void){printf("Tuesday\n");
}static void func3(void){printf("Wednesday\n");
}static void func4(void){printf("Thursday\n");
}static void func5(void){printf("Friday\n");
}static void func6(void){printf("Saturday\n");
}static void func7(void){printf("Sunday\n");
}static TWeek arr[] = {{"Mon", func1},{"Tue", func2},{"Wed", func3},{"Thu", func4},{"Fri",func5},{"Sat", func6},{"Sun", func7}
};void funcHandle(const char *str){int arrSize = sizeof (arr) / sizeof (arr[0]);for(int i = 0; i < arrSize; i++){if(strcmp(str, arr[i].weekAbbreviation)==0){arr[i].func();}}
}int main(){funcHandle("Sun");
};

3.2 C++语言风格

  • WeekHandler.h

#ifndef WEEKHANDLER_H
#define WEEKHANDLER_H#include <cstring>// 定义函数指针类型
typedef void (*pFunc)(void);// 定义包含星期缩写和对应函数的结构体
typedef struct {const char *weekAbbreviation;pFunc func;
} TWeek;class WeekHandler {
public:WeekHandler();void funcHandle(const char *str);private:static void func1(void);static void func2(void);static void func3(void);static void func4(void);static void func5(void);static void func6(void);static void func7(void);static TWeek arr[7];
};#endif // WEEKHANDLER_H
  • WeekHandler.cpp

#include "WeekHandler.h"
#include <cstdio>// 定义并初始化静态成员变量
TWeek WeekHandler::arr[] = {{"Mon", WeekHandler::func1},{"Tue", WeekHandler::func2},{"Wed", WeekHandler::func3},{"Thu", WeekHandler::func4},{"Fri", WeekHandler::func5},{"Sat", WeekHandler::func6},{"Sun", WeekHandler::func7}
};// 构造函数
WeekHandler::WeekHandler() {// 如果有需要初始化的内容可以在这里添加
}// 成员函数:处理输入字符串并调用对应的函数
void WeekHandler::funcHandle(const char *str) {int arrSize = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < arrSize; ++i) {if (std::strcmp(str, arr[i].weekAbbreviation) == 0) {arr[i].func();  // 调用对应的函数return;         // 找到匹配后退出循环}}printf("No matching day found.\n");  // 如果没有找到匹配项
}// 静态成员函数定义
void WeekHandler::func1(void) {printf("Monday\n");
}void WeekHandler::func2(void) {printf("Tuesday\n");
}void WeekHandler::func3(void) {printf("Wednesday\n");
}void WeekHandler::func4(void) {printf("Thursday\n");
}void WeekHandler::func5(void) {printf("Friday\n");
}void WeekHandler::func6(void) {printf("Saturday\n");
}void WeekHandler::func7(void) {printf("Sunday\n");
}
  • main.cpp
#include "WeekHandler.h"
#include <iostream>
#include <memory>int main() {WeekHandler handler;handler.funcHandle("Sun");handler.funcHandle("Sun");std::unique_ptr<WeekHandler> funcHandle = std::make_unique<WeekHandler>();funcHandle->funcHandle("Thu");funcHandle->funcHandle("Mon");return 0;
}

3.3 c语言风格

  • week_handler.h

#ifndef WEEK_HANDLER_H
#define WEEK_HANDLER_H#include <cstddef> // For size_t// 定义函数指针类型
typedef void (*pFunc)(void);// 定义包含星期缩写和对应函数的结构体
typedef struct {const char *weekAbbreviation;pFunc func;
} TWeek;// 声明处理函数
void funcHandle(const char *str);#endif // WEEK_HANDLER_H
  • week_handler.c

#include "week_handler.h"
#include <cstring>
#include <cstdio>// 静态函数定义
static void func1(void) {printf("Monday\n");
}static void func2(void) {printf("Tuesday\n");
}static void func3(void) {printf("Wednesday\n");
}static void func4(void) {printf("Thursday\n");
}static void func5(void) {printf("Friday\n");
}static void func6(void) {printf("Saturday\n");
}static void func7(void) {printf("Sunday\n");
}// 静态数组,包含星期缩写及其对应的函数
static TWeek arr[] = {{"Mon", func1},{"Tue", func2},{"Wed", func3},{"Thu", func4},{"Fri", func5},{"Sat", func6},{"Sun", func7}
};// 处理输入字符串并调用对应的函数
void funcHandle(const char *str) {size_t arrSize = sizeof(arr) / sizeof(arr[0]);for (size_t i = 0; i < arrSize; ++i) {if (std::strcmp(str, arr[i].weekAbbreviation) == 0) {arr[i].func();  // 调用对应的函数return;         // 找到匹配后退出循环}}printf("No matching day found.\n");  // 如果没有找到匹配项
}
  • main.c
#include "week_handler.h"int main() {funcHandle("Sun");return 0;
}

http://www.xdnf.cn/news/5540.html

相关文章:

  • Kubernetes生产实战(二十):容器大镜像拉取优化指南
  • 8.二叉树减枝
  • 双流 JOIN 与维表 JOIN 的区别
  • 多线程与信号
  • 软件设计师-错题笔记-软件工程基础知识
  • 总结C/C++中程序内存区域划分
  • 判断公网IP办法
  • Java SolonMCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解
  • Kubernetes排错(十三):Pod间偶发超时问题排查
  • 期刊 | 《电讯技术》
  • [SAP] SAP ERP用户参数设置
  • Funplus 服务端开发实习 面经
  • 分享一些资料供大家学习
  • PCB 设计 | 1A / 10A / 100A
  • 41、IIS 应⽤程序池集成模式和经典模式的区别?
  • 点和体素哪个好
  • 损失函数的选择和技术分析:深度学习模型训练的指南
  • GO语言-导入自定义包
  • 嵌入式STM32学习——振动传感器控制继电器开关灯
  • 力扣-二叉树-101 对称二叉树
  • fast-livo2原理
  • 【Java学习笔记】属性重写问题
  • 全栈项目实战:Vue3+Node.js开发博客系统
  • Python-MCPAgent开发-DeepSeek版本
  • MySQL索引原理以及SQL优化(二)
  • 【更新至2023年】1999-2023年上市公司人工智能词频统计数据(年报词频统计)
  • RGA模块讲解
  • 低代码平台与 AI 融合:从 Activity 流程到智能 ITSM 的落地实践
  • 单片机-STM32部分:12、I2C
  • 2003-2022年 地级市-政府干预程度指标数据-社科数据