zoukankan      html  css  js  c++  java
  • C和指针 第十六章 标准函数库

    字符串转换:

    long int strtol(char const *string, char **unused, int base);

    将字符串转换为数值形式,遇到非法字符停止,如果stop不是NULL,则将转换停止位置储存在stop中。

    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
        //stop储存转换停止的位置的指针
        char *stop;
        printf("%ld
    ", strtol("123abc", &stop, 10));
        printf("%s
    ", stop);
    
        //如果字符串以0x开头,base为0或者16都会以16进制转换
        printf("%ld
    ", strtol("0x123", &stop, 16));
        printf("%s
    ", stop);
        printf("%ld
    ", strtol("0x123", &stop, 0));
        printf("%s
    ", stop);
    
        //当base不是0和16遇到0x,为非法字符
        printf("%ld
    ", strtol("0x123", &stop, 10));
        printf("%s
    ", stop);
    
        return 0;
    }
    

    运行:

    日期和时间:

    clock_t clock(void);
    

    clock返回从秩序开始执行处理器所消耗的时间,通常是处理器时钟的滴答次数,如果需要转换成秒,需要除以常量 CLOCKS_PER_SEC

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <windows.h>
    
    
    int main()
    {
        clock_t start;
        clock_t end;
        //开始时间
        start = clock();
        //睡眠3000毫秒
        Sleep(3000);
        //结束时间
        end = clock();
    
        printf("%lu", (end - start) / CLOCKS_PER_SEC);
        return 0;
    }
    

    运行:

    time_t time(time_t *returned_value);
    

    不同编译器有不同返回值,所以不可以通过两次相减获得时间差,一般默认返回从1970后到现在的秒数,如果需要时间差可以通过difftime函数

    int main()
    {
        time_t now;
        now = time(NULL);
    
        printf("%lu", now);
        return 0;
    }
    

    运行:

    char *ctime(time_t const *time_value)
    

    ctime函数的参数是一个指向time_t的指针,并返回一个指向字符串的指针

    struct tm *gmtime(time_t const *time_value)
    struct tm *localtime(time_t const *time_value)
    

    gmtime函数把时间值转换为世界协调时间,localtime转换为本地时间,struct tm结构包含时间的各个字段信息。

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <windows.h>
    
    
    int main()
    {
        time_t now;
        time_t end;
        char *time_s;
        //now为1970年至今时间戳
        now = time(NULL);
        //time_s为日期字符串格式
        time_s = ctime(&now);
        printf("%s %lu
    ", time_s, now);
    
        //休眠一秒
        Sleep(1000);
        end = time(NULL);
        //difftime返回秒数时间差
        printf("between %g
    ", difftime(end, now));
    
        //localtime转换time_t值为tm结构,tm结构包含日期和时间的各个组成部分
        struct tm *tm_time = localtime( &end);
        //tm结构体中月份以0为开始, tm_year以1900为起始年
        printf("%d %d %d
    ", tm_time -> tm_mon + 1, tm_time -> tm_mday, tm_time -> tm_year + 1900);
    
        //gmtime转换为UTC时间
        tm_time = gmtime( &end);
        //tm结构体中月份以0为开始, tm_year以1900为起始年
        printf("%d %d %d
    ", tm_time -> tm_mon + 1, tm_time -> tm_mday, tm_time -> tm_year + 1900);
    
        //asctime函数把tm参数所表示的时间转换为一个指定格式的字符串
        char *astime;
        astime = asctime(tm_time);
        printf("%s
    ", astime);
        return 0;
    }
    

    运行:

    函数strftime把一个tm结构转换成一个根据某个格式字符串而指定的字符串。

    size_t strftime(char *string, size_t maxsize, char const *format, struct tm const *tm_ptr);
    

    如果转换结果字符串长度小于maxsize参数,那么该字符串就被复制到第一个参数指定的数组中。

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main()
    {
        char format_time[100];
        size_t maxsize = 100;
        char format[100] = "%Y-%m-%d %H:%M:%S";
        time_t now;
        now = time(NULL);
        struct tm *time_tm = localtime(&now);
        strftime(format_time, maxsize, format, time_tm);
        printf("%s", format_time);
        return 0;
    }
    

    运行:

    localtime和gmtime可以把time_t转换成tm结构体个,而mktime可以把tm结构体转换成time_t值

    time_t mktime(struct tm *tm_ptr)
    
  • 相关阅读:
    算法训练 区间k大数查询
    算法训练 最大最小公倍数
    身份证号码升级
    python包与模块导入
    python函数
    HDU 3595 博弈论,被支配的恐惧
    BZOJ 3195 [Jxoi2012]奇怪的道路
    大暑假集训
    [Poi2010]Monotonicity 2
    BZOJ 4868 HEOI 期末考试
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5874864.html
Copyright © 2011-2022 走看看