学习如何解析字符串并在C中使用结构

时间:2014-03-06 10:18:29

标签: c string parsing struct

我正试图用C语言中的结构和指针搞乱。 我想要完成的是用户在main()中以DD-MM-YYYY格式输入日期,然后解析字符串formatted_date。我已经阅读了一些关于如何执行此操作的建议,但不了解如何应用它。任何帮助都非常感谢。 谢谢!

#ifndef DATE_H_
#define DATE_H_

// Define the structure date.
typedef struct {
    int tm_mday;
    int tm_month; 
    int tm_year;
} date;

// Parses a string 'formatted_date' representing a date
// in format DD-MM-YYYY, DD.MM.YYYY or DD/MM/YYYY
// into a structure date 'parsed_date'.
void parse_formatted_date(char * formatted_date, date * parsed_date) {

}

1 个答案:

答案 0 :(得分:2)

您可以使用sscanf()来解析此格式的日期字符串,如下所示:

int parse_formatted_date(const char *formatted_date, date *parsed_date) {
    const int ret = sscanf(formatted_date, "%d-%d-%d",
            &parsed_date->tm_mday,
            &parsed_date->tm_month,
            &parsed_date->tm_year);
    return ret == 3;
}

这是完整的测试程序:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int tm_mday;
    int tm_month; 
    int tm_year;
} date;

int parse_formatted_date(const char *formatted_date, date *parsed_date) {
    const int ret = sscanf(formatted_date, "%d-%d-%d",
            &parsed_date->tm_mday,
            &parsed_date->tm_month,
            &parsed_date->tm_year);
    return ret == 3;
}

int
main(int argc, char *argv[])
{
    date d;

    char *formatted_date = "06-03-2014";
    if (parse_formatted_date(formatted_date, &d))
        printf("date: %s\ndd = %d, mm = %d, yy = %d\n", formatted_date,
                d.tm_mday, d.tm_month, d.tm_year);
    exit(EXIT_SUCCESS);
}