如何从C中的字符串中提取数字

时间:2014-03-01 16:33:31

标签: c

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

有没有办法使用某种扫描功能?

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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');

答案 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();