设为首页 加入收藏

TOP

用链表解决if语句过多的问题(一)
2014-02-14 12:51:44 来源: 作者: 【 】 浏览:192
Tags:解决 语句 过多 问题

  用设计模式实现完以后我突然发现,所谓的设计模式其实在C语言里不就是链表吗?当前节点能处理就处理不能处理让下一个节点处理,不多说,上代码

  消息类的设计

  message.h

  #ifndef MESSAGE_H

  #define MESSAGE_H

  #define TRUE 1

  #define FALSE 0

  typedef struct {

  int sender;

  int isSend;

  int isCharge;

  char date ;

  }Message;

  Message * makeMessage(const int sender, const char *date);

  void setSendFlag(Message * const message);

  void setChargeFlag(Message * const message);

  int isSameDate(const Message * const message, const char * const date);

  char * format(const Message * const message);

  const char * boolStr(const int value);

  #endif

  message.c

  #include <assert.h>

  #include <string.h>

  #include <stdlib.h>

  #include <stdio.h>

  #include "message.h"

  Message * makeMessage(const int sender, const char *date)

  {

  Message *message = (Message*)malloc(sizeof(Message));

  assert(message != NULL);

  message->sender   = sender;

  message->isSend   = FALSE;

  message->isCharge = FALSE;

  strncpy(message->date, date, 8);

  return message;

  }

  const char * boolStr(const int value)

  {

  return value == TRUE "TRUE" : "FALSE";

  }

  char * format(const Message * const message)

  {

  #define BUF_SIZE 1024

  static char buffer[BUF_SIZE];

  memset(&buffer, 0, BUF_SIZE);

  snprintf((char*)&buffer, BUF_SIZE, "Message <%d isSend:%s isCharge:%s>\n", \

  message->sender, boolStr(message->isSend), boolStr(message->isCharge));

  return (char*)buffer;

  }

  void setSendFlag(Message * const message)

  {

  message->isSend = TRUE;

  }

  void setChargeFlag(Message * const message)

  {

  message->isCharge = TRUE;

  }

  int isSameDate(const Message * const message, const char * const date)

  {

  if (strncmp(message->date, date, 8) == 0)

  {

  return TRUE;

  }

  else

  {

  return FALSE;

  }

  }

  testMessage.c

  #include <stdio.h>

  #include "message.h"

  #include "gtest/gtest.h"

  TEST(MESSAGE,makeMessage){

  Message *message = makeMessage(1,"20131212");

  EXPECT_EQ(1, message->sender);

  EXPECT_STREQ("Message <1 isSend:FALSE isCharge:FALSE>\n", format(message));

  }

  链表类的实现

  node.h

  #ifndef NOTE_H

  #define NOTE_H

  typedef struct Node{

  void *ptr;

  struct Node *next;

  }Node;

  Node *makeListWithArray(void *array[], int length);

  void foreach(Node *list, void (*process) (Node *));

  #endif

  node.c

  #include <stdlib.h>

  #include <assert.h>

  #include "node.h"

  Node *makeListWithArray(void *array[], int length)

  {

  int i;

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 多重继承详细教程 下一篇C++快排函数用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)