串和字符函数
索引:
- isalnum
- isalpha
- isblank
- iscntrl
- isdigit
- isgraph
- islower
- isprint
- ispunct
- isspace
- isupper
- isxdigit
- memchr
- memcmp
- memcpy
- memmove
- memset
- strcat
- strchr
- strcmp
- strcoll
- strcpy
- strcspn
- strerror
- strlen
- strncat
- strncmp
- strncpy
- strpbrk
- strrchr
- strspn
- strstr
- strtok
- strxfrm
- tolower
- toupper
在C语言中,字符串函数针对由null结尾的字符数组进行操作。并要求有头文件<string.h>,字符函数要求的头部是<ctype.h>。
在C语言中,可打印字符指可以在终端上显示的字符,在ASCII环境下,通常是空格(0x20)和代字号(0xFE)之间的字符。控制字符有0和0x1F值与DEL(0x7F)之间的值。
1.isalnum
#include <ctype.h> int sialnum(int ch);
变元为字母或数字时,函数返回非0值,否则返回0。
2.isalpha
#include <ctype.h> int isalpha(int ch);
当变元为字母表中的字母时,函数返回非0值,否则返回0。各种语言的字母表互不相同,对于英语来说,字母表由大写和小写的字母A到Z组成。
3.isblank
#include <ctype.h> int isblank(int ch);
如果变元是isspace()为其返回值的字符并用于独立的单词,则函数返回非0。对于英语来说,空字符就是空格和水平制表符。
4.iscntrl
#include <ctype.h> int iscntrl(int ch);
当变元是0到0x1F之间或0x7F(DEL)时,函数返回非0,否则返回0。
5.isdigit
#include <ctype.h> int isdigit(int ch);
当变元是数字(0到9)时,函数返回非0值,否则返回0。
6.isgraph
#include <ctype.h> int isgraph(int ch);
如果变元为除空格之外的任何可打印字符,则函数返回非0值,否则返回0。对于ASCII环境,可打印字符一般指0x21到0x7E范围内的值。
7.islower
#include <ctype.h> int islower(int ch);
如果变元是小写字母,函数返回非0值,否则返回0。
8.isprint
#include <ctype.h> int isprint(int ch);
如果变元是可打印字符(含空格),则函数返回非0值,否则返回0。在ASCII环境下,可打印字符一般指0x20-0x7E范围内的值。
9.ispunct
#include <ctype.h> int ispunct(int ch);
如果变元是标点符号,则函数返回非0,否则返回0。这里的标点符号(punctuation)是指既不是字母数字,也不是空格的所有可打印字符。
10.isspace
#include <ctype.h> int isspace(int ch);
当变元为空白字符,包括字符、水平制表符、垂直制表符、换页、回车或新行符,函数返回非0,否则返回0。
11.isupper
#include <ctype.h> int isupper(int ch);
如果变元为大写字母,函数返回非0,否则返回0。
12.isxdigit
#include <ctype.h> int isxdigit(int ch);
当变元为十六进制数字时,函数返回非0,否则返回0。十六进制数字的范围指字母A到F和a到f和数字0到9。
13.memchr
#include <string.h> void *memchr(const void *buffer, int ch, size_t count);
为前count个字符中首次出现ch而查找buffer指向的数组。查找成功,返回指向buffer中ch第一次出现处的指针;没有找到则返回空指针。
14.memcmp
#include <string.h> int memcmp(const void *buf1, const void *buf2, size_t count);
比较buf1和buf2指向的数组的前count个字符。
返回值如下:
- 小于0,buf1小于buf2;
- 等于0,buf1等于buf2;
- 大于0,buf1大于buf2。
15.memcpy
#include <string.h> void *memcpy(void *to, const void *from, size_t count);
从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义该函数的行为。
函数返回指向to的指针。
16.memmove
#include <string.h> void *memmove(void *to, const void *from, size_t count);
从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,则复制仍正确进行,再把正确内容放入to,但修改from。
函数返回指向to的指针。
17.memset
#include <string.h> void *memset(void *buf, int ch, size_t count);
把ch的低字节复制到buf指向的数组的前count字节处,并返回buf。该函数常用于把某个内存区初始化为已知值。
18.strcat
#include <string.h> char *strcat(char *str1, const char *str2);
把str2的一个副本连接到str1之后,在新形成的str1串后面用一个null字符终止。其中终止原str1的null字符被str2的第一个字符覆盖,str2的内容与操作无关。如果str1和str2重叠,则操作结果无定义。
函数返回指针str1。
注意,该函数没有进行边界检查,要防止溢出。
19.strchr
#include <string.h> char *strchr(const char *str, int ch);
把指针指向到由str指向的串中ch第一次出现低字节的地方。如未发现匹配,则返回空指针。
20.strcmp
#include <string.h> int strcmp(const char *str1, const char *str2);
按字典顺序比较两个字符串,返回整数值的意义如下:
- 小于0,str1小于str2;
- 等于0,str1等于str2;
- 大于0,str1大于str2;
21.strcoll
#include <string.h> int strcoll(const char *str1, const char *str2);
比较串str1和str2,比较方法按照setlocal()函数指定的设置进行。
函数返回值如下:
- 小于0,str1小于str2;
- 等于0,str1等于str2;
- 大于0,str1大于str2;
22.strcpy
#include <string.h> char *strcpy(char *str1, const char *str2);
把str2的内容拷贝到str1。str2必须是终止符为null字符串指针,函数返回指针str1。
如果str1和str2重叠,则函数行为无定义。
23.strcspn
#include <string.h> size_t strcspn(const char *str1, const char *str2);
返回str1中全由非str2中字符组成的第一个子串的长度。换言之,函数返回一个由str1指向的串中的第一个字符与由str2指向的串中任何字符相匹配的下标。
如:strcspn(“this is a test”, “ab”),返回8。
24.strerror
#include <string.h> char *strerror(int errnum);
返回一个指针,指向与errnum值有关的一个串(串内容依赖于实现)。程序中不应该修改这种串值。
25.strlen
#include <string.h> size_t strlen(const char *str);
返回null结尾串str的长度,null字符不算在内。
26.strncat
#include <string.h> char *strncat(char *str1, const char *str2, size_t count);
把串str2中不多于count个字符连接到串str1并以null终止str1。用str2的第一个字符冲掉原str1的终止符null,串str2不变。如果str1和str2重叠,结果无定义。
函数返回str1。
注意,函数没有进行边界检查,要防止溢出。
27.strncmp
#include <string.h> int strncmp(const char *str1, const char *str2, size_t count);
按字典顺序比较两个null结尾串的不多于count个字符,根据比较结果返回的整数值如下:
- 小于0,str1小于str2;
- 等于0,str1等于str2;
- 大于0,str1大于str2;
28.strncpy
#include <string.h> char *strncpy(char *str1, const char *str2, size_t count);
把str2中的count个字符拷贝到串str1中,str2必须是null符结尾的字符串指针。如果str1和str2重叠,则函数行为无定义。
如果str2指向的字符串少于count个字符,则null字符将加到str1的结尾,直到满足count个字符为止。
如果str2的长度大于count个字符,则结果串str1不用null结尾。
函数返回指向str1的指针。
29.strpbrk
#include <string.h> char *strpbrk(const char *str1, const char *str2);
返回一个指针,指向str1中匹配str2中任意字节的第一个字符。未发生匹配时,函数返回空指针。串中的null不参加匹配。
如:printf(“%s\n”, strpbrk(“this is a test”, “absj”));显示“s is a test”。
30.strrchr
#include <string.h> char *strrchr(const char *str, int ch);
返回一个指针,指向ch低字节在串str中的最后一次出现。如为发生匹配,返回值是空指针。
31.strspn
#include <string.h> size_t strspn(const char *str1, const char *str2);
返回str1中仅由str2中字符构成的第一个子串的长度。换言之,函数返回指向str1中不匹配串str2中任何字符的第一个字符的下标。
如:strspn(“this is a test”, “siht”),值为8。
32.strstr
#include <string.h> char *strstr(const char *str1, const char *str2);
返回一个指针,指向串str1中串str2的第一次出现。无匹配时,返回空指针。
33.strtok
#include <string.h> char *strtok(char *str1, const char *str2);
返回一个指针,指向串str1中的下一个词法单位(token)。组成串str2的字符是确定词法单位的间隔符。无词法单位时,函数返回空指针。
第一次调用函数时,实际使用str1,后续调用中,必须在第一个变元处使用空指针,直到无词法单位时为止。
对函数的每次调用中,都可能使用不同的一组间隔符串。
如:
char *p; p = strtok(“The summer soldier,the sunshine patriot”, “ “); printf(“%s”, p); do { p = strtok(“\0”, “, “); /* 此处str2是逗号和空格 */ if (p) printf(“|%s”, p); } while (p);
显示结果是:The | summer | soldier | the | sunshine | patriot
34.strxfrm
#include <string.h> size_t strxfrm(char *str1, const char *str2, size_t count);
变换str2串的前count个字符,使其适合strcmp()的操作。函数把变换结果放到串str1中。不会超过count个字符被写入str1指向的数组。
变换之后,strcmp()使用str1的效果和strcoll()使用原始str2的效果相同。
函数返回变换后的串的长度。
35.tolower
#include <string.h> int tolower(int ch);
当ch为字母时,返回其等价的小写字母,否则返回ch的内容不变。
36.toupper
#include <string.h> int toupper(int ch);
当ch为字母时,返回其等价的大写字母;否则返回ch不变。