Linux C 第五章 字符串处理函数

来源:互联网 发布:开票软件年费 编辑:程序博客网 时间:2024/06/06 03:17

第五章 字符串处理函数

//所需头文件#include "string.h"bcmp : int bcmp(const void *s1, const void *s2, int n); 比较内存内容    用来比较s1 和s2 所指的内存前n个字节,n=0;返回0;  s1 s2相同返回0,不相同返回非0;    若参数s1和s2所指的内存内容完全相同返回0,否则返回非零值;    char str1[] = "hello";    char str2[] = "yes";    if (bcmp(str1, str2, 3)){};bcopy : void bcopy(const void *src, void *dest, int n); 拷贝内存内容    将src 的前n个字节copy 到dest  bcopy(src, dest, n); src 指针放在前。    char str1[10] = "hello";    char str2[10] = "";    bcopy(str1, str2, 5);bzero : void bzero(void *s, int n);    将参数s所指的内存区域前n个字节,全部设为0;    char s[30];    bzero(s, sizeof(s));ffs : int ffs(int i);(在一个整型数中查找第一个值为真的位)    会由低位到高位,判断i字节中每一位,将最先出现位值为1的位置返回。 返回值0~32 bit位,第一个为真的位置;    int i[] = {0, 2, 4, 6, 8, 16, 32, 64};    int j;    for (j = 0; j < 8; j++)        printf("%d : %d \n", i[i], ffs(i[j]));    输出结果        0 : 0    1 : 1    2 : 2    4 : 3    8 : 4    16 : 5    32 : 6index : char *index(sonst char *s, int c);     找出s字符串中第一个出现c的地址,然后将此地址返回。未找到c返回0;    char *s = "022145678";    char *p;    p = index(s, '5'); //5678memccpy : void *memccpy(void *dest, const void *src, int c, size_t n); 拷贝内存内容    用来拷贝src所指向的内存内容前n个字节到dest所指向的地址上。现memcpy不同的是,memccpy()会在复制时检查参数c是否    出现,若是则返回dest中值为c的下一个字节地址。    返回指向dest中值为c的下一个字节指针。返回值0表示在src所指的内存前n个字节中没有值为c的字节。memchr :void *memchr(const void *s, int c, size_t n); 在某一内存范围中查找一特定字符    从头开始搜寻s所指向的内存内容前n个字节,直到发现第一个值为c的字节,则返回指向该字符的指针;    如果找到指定字节,则返回指向该字符的指针,否则返回0char *s = "01234567894567891456";    char *p;    p = memchr(s, '5', 10);    printf("%s\n", p); //输出567894567891456memcmp :int memcmp(const void *s1, const void *s2, size_t n);    用来比较s1和s2所指定内存区前n个字符,字符串大小以ASCII码表上的顺序来决定,s1 = s2 返回0;     s1 > s2返回大于0的值,s1 < s2返回小于0的值;memcpy : void *memcpy(void *dest, const void *src, size_t n);    用来拷贝src所指向的内存内容前n个字节到dest所指向的地址上。会完整复制n个字节;memfrob : void *memfrob(void *s, size_t n); 对内存区域编码    用来将参数s所指向的内存空间前n个字符与42作OXR运算,用途是可以隐藏一特定字符串内容,只要再用相同的参数    调用memfrob()即可还原内容;    char s[] = "This is test memfrob";    printf("%s\n", s);    memfrob(s, strlen(s));    printf("%s\n", s);    memfrob(s, strlen(s));    printf("%s\n", s);memmove :void *memmove(void *dest, const void *src, size_t n);    用来拷贝src所指向的内存内容前n个字节到dest所指向的地址上。当src和dest所指向的内存区域重叠时memmove仍然可以正确处理;memset : void *memset(void *s, int c, size_t n);    将参数s所指向的内存区域前n个字节以参数c填入,然后返回指向s的指针;    char s[30];    memset(s, 'X', sizeof(s));    s[30] = '\0'; //字符串结尾要补入‘\0’ 字符结束符;    printf("%s\n", s);rindex : char *rindex(sonst char *s, int c);     用来找出s字符串中最后一个出现c的地址,然后将此地址返回。字符串结束符(NULL)也视为字符串的一部分,未找到c返回0;strcasecmp: int strcasecmp(const char *s1, const char *s2);    用来比较参数s1 和 s2 字符串,比较时会自动忽略大小写的差异    s1 s2相同返回0,s1长度大于s2长度返回大于0, s1长度小于s2返回小于0的值。strcat : char *strcat(char *dest, const char *src); 连接两个字符串    将参数src字符串拷贝到参数dest所指的字符串尾,dest要有足够的空间来容纳拷贝的字符串;    返回dest字符串的起始地址;    char a[30] = "hello ";    char b[] = "world";    strcat(a, b);strchr : char *strchr(const char *s, int c);    找出s1 中第一个出现c 的地址 ,然后将该字符出现的地址返回;    char *s = "01234564879871312156";    char *p;    p = strchr(s, '6');strcmp :int strcmp(const char *s1, const char *s2);    用来比较s1和s2,字符串大小以ASCII码表上的顺序来决定,s1 = s2 返回0;     s1 > s2返回大于0的值,s1 < s2返回小于0的值;strcoll : int strcoll(const char *s1, const char *s2);    会依环境变量LC_COLLATE所指定的文字排列次序来比较参数s1和s2字符串;    若参数s1和s2所指的内存内容完全相同返回0,s1 若大于 s2 返回大于0的值, s1 若小于s2返回小于0的值;strcpy : char *strcpy(char *dest, const char *src);    将参数src字符串拷贝到参数dest所指的地址;返回参数dest的起始地址;strcspn :size_t strcspn(const char *s, const char *reject);    从参数s字符串开头计算连续的字符,而这些字符都完全不在参数reject所指的字符串中;    返回字符串s开头连续不含字符串reject内的字符数目;    char *str = "Abcdefg1234567/12346-586";    strcspn(str, 'e');    strcspn(str, '2');strdup : char *strdup(const char *s); 复制字符串    会先用malloc()分配与参数s字符串相同大小的空间,然后将参数s字符串内容复制到该空间,然后把地址返回;    该地址最后可以用free()来释放;    返回新字符串地址,若返回NULL表示内存不足;    char a[] = "strdup";    char *b;    b = strdup(a);    printf("%s\n", b);strfry : char *strfry(char *string); 随机重组字符串    会利用rand()来随机重新分配参数string字符串内的字符,然后返回指向参数string字符串的指针;    char a[] = "strfry";    printf("%s\n", strfry(a));strlen : size_t strlen(const char *s);     用来记算指定的字符串s的长度,不包括结束符‘\0’;    返回字符串s的字符数;    char *str = "123456789";    printf("%d\n", strlen(str));strncasecmp :int strncasecmp(const char *s1, const char *s2, size_t n);忽略大小写比较字符串    用来比较s1 和 s2 字符串前n个字符,比较时会自动忽略大小写的差异;    若参数s1和s2字符串相同则返回0,s1大于s2时返回大于0值, s1小于s2时返回小于0值;    char *s1 = "AbCdeF";    char *s2 = "aBcdeF";    strncasecmp(s1, s2, strlen(s1));strncat :char *strncat(char *dest, const char *src, size_t n);连接两个字符串    将src字符串拷贝n个字符到dest所指的字符串尾;第一个参数dest要有足够的空间;    返回dest字符串的起始地址;    char a[30] = "Linux is good";    char b[] = "hello linux";    printf("%s\n", strncat(a,b, 5));strncmp :int strncmp(const char *s1, const char *s2, size_t n);比较字符串    用来将参数s1中前n个字符和参数s2字符串做比较;若参数s1和s2字符串相同则返回0,    s1大于s2时返回大于0值, s1小于s2时返回小于0值;strncpy :char *strncpy(char *dest, const char *src, size_t n); 拷贝字符串    将参数src字符串拷贝前n个字符至参数dest所指的地址。    返回参数dest的起始地址;strpbrk : char *strpbrk(const char *s, const char *accept); 查找字符串第一个出现的指定字符    用来找出参数s字符串中最先出现存在参数accept字符串中的任意字符;    返回找到指定字符的地址,未找到返回0strrchr :char *strrchr(const char *s, int c); 查找字符串最后一个出现的指定字符    用来找出参数s字符串中最后一个出现的参数c的地址,然后将该地址返回,未找到返回0strspn :size_t strspn(const char *s, const char *accept);    从参数s字符串的开头计算连续的字符,而这些字符都完全是accept所指字符串中的字符。    返回字符串s开头连续包含字符串accept内的字符数目;strstr :char *strstr(const char *haystack, const char *needle);    会从字符haystack中搜索字符串needle,并返回第一次出现的地址.    返回指定字符串中第一次出现的地址,否则返回0;strtok :char *strok(char *s, const char *delim);分割字符串    用来将字符串分割成一个个片段,参数s指向欲分割的字符串,参数delim则为分割这符串,当strtok()在参数s的字符串中    发现参数delim的分割字符时则会将该字符改为‘\0’字符,在第一次调用时strtok()必须给予参数s字符串,往后的调用则将    参数s设为NULL。每次调用成功则返回下一个分割后的字符串指针;    返回下一个分割的字符串指针,如果已无从分割则返回NULL;    char s[] = "ab-ad; ef;gh;i-jefljl;mkljfjei;jlakfe;wve-ave;efq;";    char *delim = "-; ";    char *p;    printf("%s ", strtok(s, delim));    while( (p=strtok(NULL, delim))) printf("%s ",p);    printf("\n");
原创粉丝点击