2014-03-01 62 views
2

我正在为一所学校的项目工作,但我无法弄清楚如何从字符串中提取一年中的日期"20-02-2015"日期始终为XX-XX-XXXX如何从一个字符串中提取一个数字C

有什么方法可以使用某种扫描功能?

+0

我想我给予好评将使u到给予好评@Rikayan答案:) –

回答

8
char date[]="20-02-2015"; 
int d,m,y; 
sscanf(date,"%d-%d-%d",&d,&m,&y); 
+2

谢谢你的工作是的,如果我有更多的15个声望,我会upvoted你:) – Dennis

+0

@丹尼斯你会,以后。欢迎来到这个网站! –

+0

@丹尼斯你可以接受答案,这已经足够了:) – Dabo

0

是的,与%d-%d-%d格式。

如果从标准输入读,使用scanf,从一个文件中使用fscanf与字符串使用sscanf

+0

但扫描功能,我应该使用哪一个然后?因为我只知道scanf()来读取键盘输入 – Dennis

+0

从一个字符串,使用'sscanf' - 我已经编辑了这篇文章。 – abligh

0

你可以把使用字符串的strtok(日期“ - ”),那么可以使用的atoi()以日期,月份和年份作为数字。检查这个link它可以帮助你

+0

如果令牌的数量已知且很小,则不需要使用'strtok'。 –

+0

@RikayanBandyopadhyay我告诉了一般的可能性。在这种情况下,因为格式是固定的,所以可以很容易地使用sscanf()。 – LearningC

2

假设你的字符串作为char* strchar 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'); 
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 
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(); 
相关问题