如何在c中分离和存储字符串中的元素?

时间:2014-05-17 09:01:01

标签: c string

我必须打开一个.txt文件。假设文件的内容是:

08123, (12/10/2010,M), (01/09/1990,D)

我想存储字符串08123"12/10/2010"'M'的不同参数,例如:

int code = 08123;
char date[10] = '12/10/2010';
char day = 'M';

此外,最后一个参数以)结束。如何迭代它直到行结束?

1 个答案:

答案 0 :(得分:0)

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

typedef struct date {
    char date[11];//+1 for '\0'.
    char day;
} Date;

typedef struct rec {
    int code;
    int dc;//number of Date
    Date *dates;
} Record;

Record *parse_rec(char *line){
    static const char *sep = ", ";
    static const int seplen = 2;//strlen(sep);
    Record *rec = malloc(sizeof(*rec));
    if(rec){
        int i, count = 0;
        char *p;
        for(p=strstr(line, sep);p;p = strstr(p+seplen, sep)){
            ++count;
        }
        rec->dc = count;
        rec->dates = malloc(count*sizeof(Date));
        rec->code = atoi(line);
        line = strstr(line, sep) + seplen;
        for(i=0;i<count;++i){
            sscanf(line, "(%[^,],%c", rec->dates[i].date, &rec->dates[i].day);
            line = strstr(line, sep) + seplen;
        }
    }
    return rec;
}

int main(void){
    char line[1024];
    FILE *fp = fopen("data.txt", "r");

    fgets(line, sizeof(line), fp);
    fclose(fp);

    Record *rec = parse_rec(line);
    printf("code: %05d\n", rec->code);
    for(int i=0;i < rec->dc; ++i){
        printf("date : %s\n", rec->dates[i].date);
        printf(" day : %c\n", rec->dates[i].day);
    }
    free(rec->dates);
    free(rec);
    return 0;
}