用户输入生日:月、日、年。当然,它需要是字符串格式,因为整数不够好。无论如何,我需要找到特定生日是一年中的哪一天(所以 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/