如何在C语言中从字符串中提取数字

3

我正在为学校做一个项目,但是我不知道如何从字符串"20-02-2015"中提取年份,日期格式始终为XX-XX-XXXX

是否有一种使用扫描函数的方法?


我认为我的点赞会让你可以点赞@Rikayan的回答 :) - A.s. Bhullar
6个回答

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

2
谢谢,那个方法有效。是的,如果我的声望超过15分,我会给你点赞的 :) - Dennis
@Dennis 你稍后会的。欢迎来到这个网站! - HelloWorld123456789

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

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

0

是的,使用 %d-%d-%d 格式。

如果从 STDIN 读取,请使用 scanf,从文件中使用 fscanf,从字符串中使用 sscanf


那么我应该使用哪个扫描函数呢?因为我只知道scanf()用于读取键盘输入。 - Dennis

0
你可以使用strtok(date,"-")来分割字符串,然后使用atoi()将日期、月份和年份转换为数字。查看这个link链接,它可以帮助你。

如果令牌数量已知且较少,则无需使用strtok - HelloWorld123456789
@RikayanBandyopadhyay 我一般来说提到了可能性。在这种情况下,由于格式是固定的,可以轻松使用sscanf()。 - LearningC

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