我正在为学校开展一个项目,但我无法弄清楚如何从字符串"20-02-2015"
中的日期中提取年份,日期始终为XX-XX-XXXX
有没有办法使用某种扫描功能?
答案 0 :(得分:9)
char date[]="20-02-2015";
int d,m,y;
sscanf(date,"%d-%d-%d",&d,&m,&y);
答案 1 :(得分:2)
假设您的字符串为char* str
或char str[]
,您可以尝试:
int day,mon,year;
sscanf(str,"%d-%d-%d",&day,&mon,&year);
或者您可以尝试这样做,以获得更好的性能(通过避免调用sscanf
):
int year = 1000*(str[6]-'0')+100*(str[7]-'0')+10*(str[8]-'0')+(str[9]-'0');
答案 2 :(得分:1)
您可以使用strtok()函数拆分字符串(并指定要使用的分隔符)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *date = malloc(10);
char *day = NULL;
char *month = NULL;
char *year = NULL;
strcpy(date, "01-03-2014");
day = strtok(date, "-");
printf("%s\n",day);
month = strtok(NULL, "-");
printf("%s\n",month);
year = strtok(NULL, "-");
printf("%s\n",year);
free(date);
return 0;
}
输出:
01
03
2014
答案 3 :(得分:0)
是的,使用%d-%d-%d
格式。
如果从STDIN读取,请使用scanf
,使用fscanf
从文件中使用sscanf
答案 4 :(得分:0)
你可以使用strtok(date,“ - ”)来划分字符串,然后可以使用atoi()将日期,月份和年份作为数字。检查这个link它可以帮助你
答案 5 :(得分:0)
正如其他人所建议的"%d-%d-%d"
。
要添加错误检查,代码是否需要确保没有尾随垃圾,并且所有内容都存在:
char date[80];
fgets(data, sizeof date, stdin);
int d,m,y;
in n;
int cnt = sscanf(date, "%d-%d-%d%n", &d, &m, &y, &n);
if (cnt == 3 && date[n] == '\n') Good();
else Bad();