加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS海南省儋州市 西门子代理商——西门子华南一级总代理

更新时间
2024-11-26 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍
1.2 实战示例

本节多数示例取自实际项目。表形式为一维数组、二维数组和结构体数组;表内容有数据、字符串和函数指针。基于表驱动的思想,表形式和表内容可衍生出丰富的组合。

1.2.1 字符统计

问题:统计用户输入的一串数字中每个数字出现的次数。

普通解法主体代码如下:

INT32U aDigitCharNum[10] = {0}; /* 输入字符串中各数字字符出现的次数 */
INT32U dwStrLen = strlen(szDigits);

INT32U dwStrIdx = 0;
for(; dwStrIdx < dwStrLen; dwStrIdx++)
{
   switch(szDigits[dwStrIdx])
   {
       case'1':
           aDigitCharNum[0]++;
           break;
       case'2':
           aDigitCharNum[1]++;
           break;
       //... ...
       case'9':
           aDigitCharNum[8]++;
           break;
   }
}

这种解法的缺点显而易见,既不美观也不灵活。其问题关键在于未将数字字符与数组aDigitCharNum下标直接关联起来。

以下示出更简洁的实现方式:

for(; dwStrIdx < dwStrLen; dwStrIdx++)
{
aDigitCharNum[szDigits[dwStrIdx] - '0']++;
}

上述实现考虑到0也为数字字符。该解法也可扩展至统计所有ASCII可见字符。

1.2.2 月天校验

问题:对给定年份和月份的天数进行校验(需区分平年和闰年)。

普通解法主体代码如下:

switch(OnuTime.Month)
{
   case1:
   case3:
   case5:
   case7:
   case8:
   case10:
   case12:
       if(OnuTime.Day>31 || OnuTime.Day<1)
       {
           CtcOamLog(FUNCTION_Pon,"Don't support this Day: %d(1~31)!!!\n", OnuTime.Day);
           retcode = S_ERROR;
       }
       break;
   case2:
       if(((OnuTime.Year%4 == 0) && (OnuTime.Year%100 != 0)) || (OnuTime.Year%400 == 0))
       {
           if(OnuTime.Day>29 || OnuTime.Day<1)
           {
               CtcOamLog(FUNCTION_Pon,"Don't support this Day: %d(1~29)!!!\n", OnuTime.Day);
               retcode = S_ERROR;
           }
       }
       else
       {
           if(OnuTime.Day>28 || OnuTime.Day<1)
           {
               CtcOamLog(FUNCTION_Pon,"Don't support this Day: %d(1~28)!!!\n", OnuTime.Day);
               retcode = S_ERROR;
           }
       }
       break;
   case4:
   case6:
   case9:
   case11:
       if(OnuTime.Day>30 || OnuTime.Day<1)
       {
           CtcOamLog(FUNCTION_Pon,"Don't support this Day: %d(1~30)!!!\n", OnuTime.Day);
           retcode = S_ERROR;
       }
       break;
   default:
       CtcOamLog(FUNCTION_Pon,"Don't support this Month: %d(1~12)!!!\n", OnuTime.Month);
       retcode = S_ERROR;
       break;
}


相关产品

联系方式

  • 电  话:15903418770
  • 联系人:张经理
  • 手  机:15915421161
  • 微  信:15915421161