一、字符串操作<string.h>
size_t strlen(char const* s);
注意:返回值类型size_t是无符号类型,和int进行运算或比较时需要注意;
char* strcpy(char* dst,char const* src);
将src复制到dst,需保证dst有足够容纳src的空间,防止溢出,返回dst。若dst和src重叠,结果未定义
char* strcat(char* dst,char const* src);
将src复制到dst后面,需保证空间充足,返回dst
int strcmp(char const* s1,char const* s2);
逐个比较s1,s2中字符的大小,s1<s2返回负数,s1>s2返回正数,
想等返回0。不相等时返回的不一定是-1和1,故返回值只能用来和0比较
char* strncpy(char* dst,char const* src,size_t len);
类似strcpy,全部复制。src长度小于len时,后面用NUL补全,否则不会在末尾自动添加NUL,重叠未定义
char* strncat(char* dst,char const* src,size_t len);
类似strcat,最多复制len个字符,结尾自动添加NUL
int strncmp(char const* s1,char const* s2);
只比较前n位
char* strchr(char const* str,int ch);
返回ch在str中第一次出现的地址
char* strrchr(char const* str,int ch);
最后一次出现
char* strpbrk(char const* str,char const* group);
group中任意一个字符在str中第一次出现的地址
char* strstr(char const* s1,char const* s2);
子串s2在s1中第一次出现的地址
size_t strspn(char const* str,char const* group);
匹配计数
size_t strcspn(char const* str,char const* group);
不匹配计数
char* strtok(char* str,char const* sep);
分割,标记。注意会改变字符串,会保存参数的局部状态信息,不能同时解析多个字符串。
使用示例:
void print_tokens( char *line ) { static char whitespace[] = " \t\f\r\v\n"; char *token; for( token = strtok( line, whitespace ); token != NULL; token = strtok( NULL, whitespace ) ) printf( "Next token is %s\n", token ); }
char* strerror(int error_number);
接收错误码作为参数,返回指向描述错误信息的字符串的指针
二、字符操作<ctype.h>
函数 | 满足条件返回真 |
isdigit | 十进制数字0~9 |
isxdigit | 十六进制数字,0~9,a~f,A~F |
isupper | 大写字母A~Z |
islower | 小写字母a~z |
isalpha | 英文字母a~z,A~Z |
isalnum | 字母或数字a~z,A~Z,0~9 |
ispunct | 标点,不属于字母或数字的图形字符 |
isgraph | 图形字符 |
isprint | 可打印字符 |
isspace | 空白字符 |
iscntrl | 控制字符 |
int tolower(int ch) | 转小写 |
int toupper(int ch) | 转大写 |
使用ctype库函数判断字符类型可提高可移植性
三、内存操作
void* memcpy(void* dst,void const* src,size_t len);
重叠未定义
void* memmove(void* dst,void const* src,size_t len);
能正确处理dst和src重叠的情况
int memcmp(void const* a,void const* b,size_t len);
void* memchr(void const* a,int ch,size_t len);
void* memset(void* a,int ch,size_t len);
把a开始的len个字节初始化为ch
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程