第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, // 默认为 0
Tue, // 1
Wed, // 2
Thu, // 3
Fri, // 4
Sat, // 5
Sun, // 6
TotalDays // 自动为 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); // 输出 Monday
Func3(Wed); // 输出 Wednesday
Func3(Sun); // 输出 Sunday
Func3((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;
}