c - 我需要用 C 解析一些月份名称

标签 c parsing

用户输入生日:月、日、年。当然,它需要是字符串格式,因为整数不够好。无论如何,我需要找到特定生日是一年中的哪一天(所以 1994 年 5 月 31 日将是第 151 天)。但是,在执行此操作之前,我需要能够将字符串“MAY”转换为某个整数。我如何轻松解析这些?我一直在尝试涉及 strcmp() 和 switch 语句或大量 if block 的巨大困惑,但事情似乎不想起作用。有没有更简单的方法而不改变程序的规范?

最佳答案

这是一种方法,使用 1..12 作为月份数字,使用 0 表示无效的月份名称:

int GetMonth( char *name )
{
   static char *szMonth[13] =
   {
      "",
      "jan", "feb", "mar", "apr", "may", "jun",
      "jul", "aug", "sep", "oct", "nov", "dec"
   };
   int m;

   for( m=12; m>0; m-- )
   {
      if( 0 == strcasecmp( name, szMonth[m] ) )
      {
         break;
      }
   }
   return m;
}

这对您来说太丑陋或效率低下吗?它对我有用,而且简单的零失败案例也很方便。您总是可以通过使用具有名称/索引对的数据结构来加快速度,按名称排序并使用二分搜索来查找月份并返回索引...但是是否值得额外的代码来保存一些比较?有时是,有时不是。

--编辑--

如果您不喜欢strcasecmp,您可以将其替换为以下内容:

if( (tolower(name[0]) == szMonth[m][0])
 && (tolower(name[1]) == szMonth[m][1])
 && (tolower(name[2]) == szMonth[m][2]) )

关于c - 我需要用 C 解析一些月份名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15555159/

相关文章:

C - 在 Connect Four 游戏中验证获胜条件

c - 使用结构指针访问 C 中的结构成员时出现段错误

C 死锁检测线程库

php - 解析两个词之间的文本

php - 如何使用 corcel 在 wordpress 中获取选定的主页?

用于解析 block 的 Python 实用程序?

python - XML 解析 - ^H 字符/符号?

perl - 解析具有重复键的缩进文本

c - 如何基于 Makefile 构建 iPhone 静态库?

c# - C Sharp 中的 SqlDataAdapter 错误