2011-05-19 152 views
2

我有一个字符数组,形式为mm/dd/yy(因为用户被要求输入日期)。将字符数组转换为整数

如何分割阵列,并删除/的,并把mmddyy到3点不同的整数?

+0

'strtol(3)'可能是最好的功能。 – sarnold 2011-05-19 01:40:39

回答

5

我会用的sscanf解析字符串:

int m, d, y;  
sscanf("05/18/11", "%02d/%02d/%02d", &m, &d, &y); 

这将解析日期为三个整数值。

另外,要验证输入数据是否格式正确,还应该检查sscanf是否返回3,表示所有三个值都已正确解析。请参阅以下working example,其中包括一些基本的错误检查。

+0

我就是这么做的。 +1 – Swift 2011-05-19 01:47:09

+1

您应该在链接代码中包含错误检查。 – 2011-05-19 01:50:20

+0

@Fred:添加了一些关于错误检查的进一步说明。 – 2011-05-19 01:58:23

0

查看产生的标记上的strtokatoi

您也可以使用sscanf,但标记化为输入格式提供了更多的灵活性。

+0

请不要使用atoi解析用户输入。它无法检测错误。 – 2011-05-19 01:53:01

0
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    int month, day, year; 
    char mystr[10] = "05/18/11"; 
    month = atoi(strtok(mystr, "/")); 
    day = atoi(strtok(NULL, "/")); 
    year = atoi(strtok(NULL, "/")); 
    return 0; 
} 

strtok()是一个函数,它首先调用一个字符串和一个分隔符来分割。在第一次调用之后,如果您将NULL作为第一个参数传递,它将继续标记相同的字符串。 atoi将字符串转换为整数。

如果您的输入非常严格,sscanf是好的。

+0

请不要使用atoi解析用户输入。它无法检测错误。 – 2011-05-19 01:51:56

-1

首先,找到最近的'/'

int i; 
char *d = date; 
for(i = 0; date[i] != '/'; ++i); 

然后申请一个 “子”:

strncpy(dd, date, i); 

重复此过程:

d = date + i + 1; 
for(; date[i] != '/'; ++i); 
strncpy(mm, d, i - (d - date)); 

然后简单地从过去的'/'去到字符串的末尾:

d = date + i + 1; 
strncpy(yy, d, strlen(date) - i); 
+0

OP问题的格式是'/'。如果它是\,那么你将不得不使用'\\'。 \符号在C字符串中有特殊的含义。 – Lundin 2011-05-19 06:36:33

+0

@downvoters我知道我有点晚了,但谨慎解释downvote? (除了效率低于上述答案 - 我是一名C++程序员。) – 2011-07-21 05:21:43