C语言中字符串函数
一、string.h中字符串处理函数
在头文件<string.h>中定义了两组字符串函数。第一组函数的名字以str开头;第二组函数的名字以mem开头。
只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义。比较类函数将其变量视为unsigned char类型的数组。
1 strcpy
char *strcpy(char *str1, const char *str2);
把字符串str2(包括'\0')拷贝到字符串str1当中,并返回str1。
2 strncpy
char *strncpy(char *str1, const char *str2, size_t count);
把字符串str2中最多count个字符拷贝到字符串str1中,并返回str1。如果str2中少于count个字符,那么就用'\0'来填充,直到满足count个字符为止。
3 strcat
char *strcat(char *str1, const char *str2);
把str2(包括'\0')拷贝到str1的尾部(连接),并返回str1。其中终止原str1的'\0'被str2的第一个字符覆盖。
4 strncat
char *strncat(char *str1, const char *str2, size_t count);
把str2中最多count个字符连接到str1的尾部,并以'\0'终止str1,返回str1。其中终止原str1的'\0'被str2的第一个字符覆盖。
注意,最大拷贝字符数是count+1。
5 strcmp
int strcmp(const char *str1, const char *str2);
按字典顺序比较两个字符串,返回整数值的意义如下:
小于0,str1小于str2;
等于0,str1等于str2;
大于0,str1大于str2;
6 strncmp
int strncmp(const char *str1, const char *str2, size_t count);
同strcmp,除了最多比较count个字符。根据比较结果返回的整数值如下:
小于0,str1小于str2;
等于0,str1等于str2;
大于0,str1大于str2;
7 strchr
char *strchr(const char *str, int ch);
返回指向字符串str中字符ch第一次出现的位置的指针,如果str中不包含ch,则返回NULL。
8 strrchr
char *strrchr(const char *str, int ch);
返回指向字符串str中字符ch最后一次出现的位置的指针,如果str中不包含ch,则返回NULL。
9 strspn
size_t strspn(const char *str1, const char *str2);
返回字符串str1中由字符串str2中字符构成的第一个子串的长度。
10 strcspn
size_t strcspn(const char *str1, const char *str2);
返回字符串str1中由不在字符串str2中字符构成的第一个子串的长度。
11 strpbrk
char *strpbrk(const char *str1, const char *str2);
返回指向字符串str2中的任意字符第一次出现在字符串str1中的位置的指针;如果str1中没有与str2相同的字符,那么返回NULL。
12 strstr
char *strstr(const char *str1, const char *str2);
返回指向字符串str2第一次出现在字符串str1中的位置的指针;如果str1中不包含str2,则返回NULL。
13 strlen
size_t strlen(const char *str);
返回字符串str的长度,'\0'不算在内。
14 strerror
char *strerror(int errnum);
返回指向与错误序号errnum对应的错误信息字符串的指针(错误信息的具体内容依赖于实现)。
15 strtok
char *strtok(char *str1, const char *str2);
在str1中搜索由str2中的分界符界定的单词。
对strtok()的一系列调用将把字符串str1分成许多单词,这些单词以str2中的字符为分界符。第一次调用时str1非空,它搜索str1,找出由非str2中的字符组成的第一个单词,将str1中的下一个字符替换为'\0',并返回指向单词的指针。随后的每次strtok()调用(参数str1用NULL代替),均从前一次结束的位置之后开始,返回下一个由非str2中的字符组成的单词。当str1中没有这样的单词时返回NULL。每次调用时字符串str2可以不同。
16 memcpy
void *memcpy(void *to, const void *from, size_t count);
把from中的count个字符拷贝到to中。并返回to。
17 memmove
void *memmove(void *to, const void *from, size_t count);
功能与memcpy类似,不同之处在于,当发生对象重叠时,函数仍能正确执行。
18 memcmp
int memcmp(const void *buf1, const void *buf2, size_t count);
比较buf1和buf2的前count个字符,返回值与strcmp的返回值相同。
19 memchr
void *memchr(const void *buffer, int ch, size_t count);
返回指向ch在buffer中第一次出现的位置指针,如果在buffer的前count个字符当中找不到匹配,则返回NULL。
20 memset
void *memset(void *buf, int ch, size_t count);
把buf中的前count个字符替换为ch,并返回buf。
二、stdlib.h中字符串与数字相互转换处理函数
1. 数字转化为字符串:
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将无符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五入。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
● fcvt():指定位数为转换精度,其余同ecvt()。
2. 字符串转化为数字
● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
以下 是代码
1.函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1); printf("%s/n", string); return 0; } 2.函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source); 程序例: #include <string.h> #include <stdio.h> int main(void) { char destination[25]; char *blank = " ", *c = "C++", *Borland = "Borland"; strcpy(destination, Borland); strcat(destination, blank); strcat(destination, c); printf("%s/n", destination); return 0; } 3.函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处/ 用 法: char *strchr(char *str, char c); 程序例: #include <string.h> #include <stdio.h> int main(void) { char string[15]; char *ptr, c = 'r'; strcpy(string, "This is a string"); ptr = strchr(string, c); if (ptr) printf("The character %c is at position: %d/n", c, ptr-string); else printf("The character was not found/n"); return 0; } 4.函数名: strcmp 功 能: 串比较 用 法: int strcmp(char *str1, char *str2); 看Asic码,str1>str2,返回值 > 0;两串相等,返回0 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; int ptr; ptr = strcmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); else printf("buffer 2 is less than buffer 1/n"); ptr = strcmp(buf2, buf3); if (ptr > 0) printf("buffer 2 is greater than buffer 3/n"); else printf("buffer 2 is less than buffer 3/n"); return 0; } 5.函数名: strncmpi 功 能: 将一个串中的一部分与另一个串比较, 不管大小写 用 法: int strncmpi(char *str1, char *str2, unsigned maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = strcmpi(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); if (ptr < 0) printf("buffer 2 is less than buffer 1/n"); if (ptr == 0) printf("buffer 2 equals buffer 1/n"); return 0; } 6.函数名: strcpy 功 能: 串拷贝 用 法: char *strcpy(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%s/n", string); return 0; } 7.函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 用 法: int strcspn(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *string1 = "1234567890"; char *string2 = "747DC8"; int length; length = strcspn(string1, string2); printf("Character where strings intersect is at position %d/n", length); return 0; } 8.函数名: strdup 功 能: 将串拷贝到新建的位置处 用 法: char *strdup(char *str); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *dup_str, *string = "abcde"; dup_str = strdup(string); printf("%s/n", dup_str); free(dup_str); return 0; } 9.函数名: stricmp 功 能: 以大小写不敏感方式比较两个串 用 法: int stricmp(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = stricmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); if (ptr < 0) printf("buffer 2 is less than buffer 1/n"); if (ptr == 0) printf("buffer 2 equals buffer 1/n"); return 0; } 10.函数名: strerror 功 能: 返回指向错误信息字符串的指针 用 法: char *strerror(int errnum); 程序例: #include <stdio.h> #include <errno.h> int main(void) { char *buffer; buffer = strerror(errno); printf("Error: %s/n", buffer); return 0; } 11.函数名: strcmpi 功 能: 将一个串与另一个比较, 不管大小写 用 法: int strcmpi(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = strcmpi(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); if (ptr < 0) printf("buffer 2 is less than buffer 1/n"); if (ptr == 0) printf("buffer 2 equals buffer 1/n"); return 0; } 12.函数名: strncmp 功 能: 串比较 用 法: int strncmp(char *str1, char *str2, int maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; int ptr; ptr = strncmp(buf2,buf1,3); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); else printf("buffer 2 is less than buffer 1/n"); ptr = strncmp(buf2,buf3,3); if (ptr > 0) printf("buffer 2 is greater than buffer 3/n"); else printf("buffer 2 is less than buffer 3/n"); return(0); } 13.函数名: strncmpi 功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写 用 法: int strncmpi(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strncmpi(buf2,buf1,3); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); if (ptr < 0) printf("buffer 2 is less than buffer 1/n"); if (ptr == 0) printf("buffer 2 equals buffer 1/n"); return 0; } 14.函数名: strncpy 功 能: 串拷贝 用 法: char *strncpy(char *destin, char *source, int maxlen); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strncpy(string, str1, 3); string[3] = '/0'; printf("%s/n", string); return 0; } 15.函数名: strnicmp 功 能: 不注重大小写地比较两个串 用 法: int strnicmp(char *str1, char *str2, unsigned maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strnicmp(buf2, buf1, 3); if (ptr > 0) printf("buffer 2 is greater than buffer 1/n"); if (ptr < 0) printf("buffer 2 is less than buffer 1/n"); if (ptr == 0) printf("buffer 2 equals buffer 1/n"); return 0; } 16.函数名: strnset 功 能: 将一个串中的所有字符都设为指定字符 用 法: char *strnset(char *str, char ch, unsigned n); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz"; char letter = 'x'; printf("string before strnset: %s/n", string); strnset(string, letter, 13); printf("string after strnset: %s/n", string); return 0; } 17.函数名: strpbrk 功 能: 在串中查找给定字符集中的字符 用 法: char *strpbrk(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *string1 = "abcdefghijklmnopqrstuvwxyz"; char *string2 = "onm"; char *ptr; ptr = strpbrk(string1, string2); if (ptr) printf("strpbrk found first character: %c/n", *ptr); else printf("strpbrk didn't find character in set/n"); return 0; } 18.函数名: strrchr 功 能: 在串中查找指定字符的最后一个出现 用 法: char *strrchr(char *str, char c); 程序例: #include <string.h> #include <stdio.h> int main(void) { char string[15]; char *ptr, c = 'r'; strcpy(string, "This is a string"); ptr = strrchr(string, c); if (ptr) printf("The character %c is at position: %d/n", c, ptr-string); else printf("The character was not found/n"); return 0; } 19.函数名: strrev 功 能: 串倒转 用 法: char *strrev(char *str); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *forward = "string"; printf("Before strrev(): %s/n", forward); strrev(forward); printf("After strrev(): %s/n", forward); return 0; } 20.函数名: strset 功 能: 将一个串中的所有字符都设为指定字符 用 法: char *strset(char *str, char c); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10] = "123456789"; char symbol = 'c'; printf("Before strset(): %s/n", string); strset(string, symbol); printf("After strset(): %s/n", string); return 0; } 21.函数名: strspn 功 能: 在串中查找指定字符集的子集的第一次出现 用 法: int strspn(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *string1 = "1234567890"; char *string2 = "123DC8"