将字符数组转换为整数

3

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

我该如何拆分这个数组,删除/,并将mmddyy放入3个不同的整数中?


strtol(3) 可能是开始的最佳函数。 - sarnold
4个回答

6
我会使用sscanf来解析字符串:
int m, d, y;    
sscanf("05/18/11", "%02d/%02d/%02d", &m, &d, &y);

这将把日期解析为三个整数值。
此外,为了验证输入数据的格式是否正确,您还应该检查sscanf返回3,表示已正确解析所有三个值。请参见以下工作示例,其中包括一些基本的错误检查。

1
你应该在你的回答中包含来自你链接代码的错误检查。 - Fred Nurk

1
#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 是一个不错的选择。


请勿使用atoi解析用户输入。它无法检测错误。 - Fred Nurk

1

查看strtokatoi的结果标记。

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


请勿使用atoi解析用户输入。它无法检测错误。 - Fred Nurk

-1

首先,找到最近的'/'

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

然后应用 "substring":

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);

问题的格式是'/ '。如果是\,那么您将不得不使用'\\'。在C字符串内,符号\具有特殊含义。 - Lundin
@downvoters 我知道我有点晚了,不过可以解释一下你们为什么要踩我吗?(除了我的回答比其他人慢一点 - 我是个C++程序员。) - Mateen Ulhaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接