day42时间格式转化

题目描述:
day42时间格式转化_第1张图片
解题思路
1.将字符串给以" "为间隔进行切割然后各个部分进行不同的处理。
字符串切割使用 strtok(char* a, char* b) 函数,该函数返回切割完成后第一个子串的指针。
//切割,返回第一个字串的指针。这里注意,第二个参数也必须是字符串,写’ ‘是错误的。
char* ptr = strtok(char* date, " ");
//获得下一个字串的方法。
ptr = strtok(NULL, " ");
2.字符串比较使用 strcmp(char* a, char* b) 函数,若两字符串相同则返回0,否则返回第一个不同字符的索引。
3.字符串拼接使用 strcat(char* a, char* b) 函数,该函数会从a字符串的’\0’处开始(包括这个’\0’字符)赋值b字符串(包括b字符串最后的’\0’字符)。因此a要有足够的空间容纳b字符串的长度。

char * reformatDate(char * date){
    char* ptr = strtok(date," ");
    //日
    char* day = (char*)malloc(sizeof(char)*3);
    if(ptr[1] == 's' || ptr[1] == 'n' || ptr[1] == 'r' || ptr[1] == 't'){
        day[0] = '0';
        day[1] = ptr[0];
        day[2] = '\0';
    }else{
        day[0] = ptr[0];
        day[1] = ptr[1];
        day[2] = '\0';
    }
    //月
    ptr = strtok(NULL," ");
    char* month;
    if(!strcmp("Jan",ptr)){
        month = "01";
    }else if(!strcmp("Feb",ptr)){
        month = "02";
    }else if(!strcmp("Mar",ptr)){
        month = "03";
    }else if(!strcmp("Apr",ptr)){
        month = "04";
    }else if(!strcmp("May",ptr)){
        month = "05";
    }else if(!strcmp("Jun",ptr)){
        month = "06";
    }else if(!strcmp("Jul",ptr)){
        month = "07";
    }else if(!strcmp("Aug",ptr)){
        month = "08";
    }else if(!strcmp("Sep",ptr)){
        month = "09";
    }else if(!strcmp("Oct",ptr)){
        month = "10";
    }else if(!strcmp("Nov",ptr)){
        month = "11";
    }else{
        month = "12";
    }
    //年
    ptr = strtok(NULL," ");
    char * result = (char*)malloc(sizeof(char)*11);
    for(int i = 0; i < 11; i++){
        result[i] = '\0';
    }
    strcat(result, ptr);
    result[4] = '-';
    strcat(result, month);
    result[7] = '-';
    strcat(result, day);
    return result;
}

#define MAX_LEN 11

#define MONTH 12

char month[MONTH][4] = {
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};//设置字典

char *reformatDate(char *date)
{
    char day[5] = { 0 };
    char year[5] = { 0 };
    char month_temp[4] = { 0 };
    int imonth;

    char *ans = (char*)malloc(sizeof(char) * MAX_LEN);
    //最终的答案

    sscanf(date, "%[0-9]%*[a-z] %s %s", day, month_temp, year);
    //sscanf和sprintf两个函数十分重要,需要记一下
    //这样就可以不用分割函数,直接写进去

    for (int i = 0; i < MONTH; i++) {
        if (strcmp(month_temp, &month[i]) == 0) {
            //要是月份没有匹配上,就加一,这样就可以得到数字
            imonth = i + 1;
        }
    }
    sprintf(ans, "%s-%02d-%02d", year, imonth, atoi(day));
    //sprintf的用法也要记住
    return ans;
}

你可能感兴趣的:(算法,时间格式转换)