Duangw

串和字符函数

索引:

  1. isalnum
  2. isalpha
  3. isblank
  4. iscntrl
  5. isdigit
  6. isgraph
  7. islower
  8. isprint
  9. ispunct
  10. isspace
  11. isupper
  12. isxdigit
  13. memchr
  14. memcmp
  15. memcpy
  16. memmove
  17. memset
  18. strcat
  19. strchr
  20. strcmp
  21. strcoll
  22. strcpy
  23. strcspn
  24. strerror
  25. strlen
  26. strncat
  27. strncmp
  28. strncpy
  29. strpbrk
  30. strrchr
  31. strspn
  32. strstr
  33. strtok
  34. strxfrm
  35. tolower
  36. 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个字符。

返回值如下:

 

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);

按字典顺序比较两个字符串,返回整数值的意义如下:

 

21.strcoll

#include <string.h>
int strcoll(const char *str1, const char *str2);

比较串str1和str2,比较方法按照setlocal()函数指定的设置进行。

函数返回值如下:

 

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个字符,根据比较结果返回的整数值如下:

 

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不变。