C语言学习之常用库函数
文章目录
一、常用的字符串处理函数
,它们主要定义在<string.h>和<ctype.h>头文件中:
1. 字符串长度
size_t strlen(const char *str);
返回字符串的长度(不包含结束符'\0')。
2. 字符串复制
char *strcpy(char *dest, const char *src);
将源字符串src复制到目标字符串dest(包括结束符)。char *strncpy(char *dest, const char *src, size_t n);
复制源字符串的前n个字符到目标字符串。如果src的长度小于n,则剩余部分用'\0'填充。
3. 字符串连接
char *strcat(char *dest, const char *src);
将源字符串src追加到目标字符串dest的末尾(覆盖dest的结束符并添加新的结束符)。char *strncat(char *dest, const char *src, size_t n);
将源字符串的前n个字符追加到目标字符串末尾,并添加结束符。
4. 字符串比较
int strcmp(const char *str1, const char *str2);
按字典序比较两个字符串。返回值为0表示相等,负数表示str1小于str2,正数表示str1大于str2。int strncmp(const char *str1, const char *str2, size_t n);
比较两个字符串的前n个字符。
5. 字符串查找
char *strchr(const char *str, int c);
查找字符串str中首次出现字符c的位置,返回指向该位置的指针,如果未找到则返回NULL。char *strrchr(const char *str, int c);
查找字符串str中最后一次出现字符c的位置。char *strstr(const char *haystack, const char *needle);
在字符串haystack中查找子字符串needle的首次出现位置。(注:返回的是内存地址,并非常见的第0个位置,第1个位置)
6. 内存操作
void *memcpy(void *dest, const void *src, size_t n);
从源内存地址复制n个字节到目标内存地址(不处理重叠)。void *memmove(void *dest, const void *src, size_t n);
复制内存块,处理重叠区域。int memcmp(const void *ptr1, const void *ptr2, size_t n);
比较两个内存区域的前n个字节。void *memset(void *ptr, int value, size_t n);
将内存区域的前n个字节设置为特定的值(通常用于清零)。
7. 其他实用函数
-
char *strpbrk(const char *str1, const char *str2);
在str1中查找第一个匹配str2中任意字符的位置。其功能是在第一个字符串str1中查找第一个匹配第二个字符串str2中任一字符的字符,并返回该字符在str1中的位置。 -
size_t strspn(const char *str1, const char *str2);
返回str1中只包含str2中字符的最大起始段的长度。(第一遍没看懂,说明一下:
(先找str2第一个字符,看看是不是在str1中,若在,cnt+1,然后找str2第二个字符是不是在str1中。直到找到不在str1中的字母,如此得到一个长度cnt。返回即可)
cnt = 0
while(str2的字符长度次){
str2[cnt]是否在str1中,
if 在{
cnt++;
}else{
retrun cnt;
}
}
-
size_t strcspn(const char *str1, const char *str2);
返回str1中第一个不包含于str2的字符出现的下标。(上一个函数的在和不在的条件对换,也就是如果不在str1中,计数加)
-
char *strtok(char *str, const char *delim);
分割字符串为标记(注意:该函数会修改原始字符串)。(没看懂,查询得知,是根据某个字符delim将str给分割,比如以下例子,第一次调用将原字符串变为
hellowora ldmynabcmeislihongfeng,并返回前一个字符串地址,将后一个字符串保存在_strtok的静态全局变量里面,以备下一次调用。第二次调用则是用b字符分割剩下的字符串。一直到字符串被分割完。(分割符号如果是多字符,则先用第一个字符分割,成功则返回,不成功再看第二个字符,以此类推)
)
char a[] = "helloworabldmynabcmeislihongfeng"; // b b char * ch = strtok(a, "b"); while(ch != NULL) { printf("ch = %s\n", ch); ch = strtok(NULL, "b"); } ////////////////////////////// 输出: ch = hellowora ch = ldmyna ch = cmeislihongfeng
8. 字符类型判断(在<ctype.h>中)
isalpha(c)- 是否为字母isdigit(c)- 是否为数字isalnum(c)- 是否为字母或数字isspace(c)- 是否为空白字符(空格、制表符、换行等)tolower(c)- 转换为小写toupper(c)- 转换为大写
9. 格式化字符串(在<stdio.h>中)
int sprintf(char *str, const char *format, ...);
将格式化的字符串写入到str中。int snprintf(char *str, size_t size, const char *format, ...);
安全版本的sprintf,指定缓冲区大小防止溢出。
10. 字符串转换(在<stdlib.h>中)
double atof(const char *str);
将字符串转换为双精度浮点数。int atoi(const char *str);
将字符串转换为整数。long atol(const char *str);
将字符串转换为长整数。long long atoll(const char *str);
将字符串转换为长长整数。
11. 错误处理
char *strerror(int errnum);
返回错误码对应的错误信息字符串(定义在<string.h>)。
二、时间相关函数
时间表示有两种:
时间戳:time_t
时间结构体:
struct tm {
int tm_sec; // 秒 [0-60]
int tm_min; // 分 [0-59]
int tm_hour; // 时 [0-23]
int tm_mday; // 月中的日 [1-31]
int tm_mon; // 月 [0-11](0=1月)
int tm_year; // 年(1900起)
int tm_wday; // 周 [0-6](0=周日)
int tm_yday; // 年中的日 [0-365]
int tm_isdst; // 夏令时标志
};
1.获取时间
time_t time(time_t *timer);
获取当前系统时间(从1970年1月1日UTC 00:00:00起经过的秒数)
clock_t clock(void);
获取程序执行时间,转换成秒需要除以CLOCKS_PER_SEC
2.时间戳格式转换
-
struct tm *localtime(const time_t *timer);转换为本地时间
-
struct tm *gmtime(const time_t *timer);不考虑时区,转换
-
time_t mktime(struct tm *timeptr);
时间转换成时间戳
3.时间格式化输出
char *ctime(const time_t *timer);char *asctime(const struct tm *timeptr);
返回样式: “Mon Jun 3 15:30:05 2024\n”
-
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);(类比snprintf函数)
自定义格式输出:
参数
-
str- 输出缓冲区 -
maxsize- 缓冲区最大容量 -
format- 格式字符串 -
timeptr- 指向tm结构体的指针 -
返回值
输出的字符数(不包括终止符),缓冲区不足时返回0
占位符:
| 符号 | 意义 | 示例 |
|---|---|---|
%Y | 四位年份 | 2024 |
%y | 二位年份 | 24 |
%m | 月(01-12) | 06 |
%d | 日(01-31) | 03 |
%H | 24小时制(00-23) | 15 |
%I | 12小时制(01-12) | 03 |
%M | 分(00-59) | 30 |
%S | 秒(00-59) | 05 |
%A | 完整星期名 | Monday |
%a | 缩写星期名 | Mon |
%B | 完整月份名 | June |
%b | 缩写月份名 | Jun |
%p | AM/PM | PM |
%c | 标准日期时间 | 本地化格式 |
更多推荐
所有评论(0)