首页 c语言函数库-第四章(字符串函数)

c语言函数库-第四章(字符串函数)

举报
开通vip

c语言函数库-第四章(字符串函数)c语言函数库 第四章(字符串函数) TOC \o "1-3" \h \z \u 1. atof:字符串转浮点型函数 1 2. atoi:字符串转整型函数 2 3. atol:字符串转长整型函数 3 4. memchr:字符搜索函数 3 5. memcmp:字符串比较函数 4 6. memcpy: 字符串拷贝函数 5 7. memmove: 字块移动函数 6 8. memset:字符加载函数 7 9. strcat:字符串连接函数 8 10. strchr:字符串中字符首次匹配函数 9 11. strcmp:字符串比...

c语言函数库-第四章(字符串函数)
c语言 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数库 第四章(字符串函数) TOC \o "1-3" \h \z \u 1. atof:字符串转浮点型函数 1 2. atoi:字符串转整型函数 2 3. atol:字符串转长整型函数 3 4. memchr:字符搜索函数 3 5. memcmp:字符串比较函数 4 6. memcpy: 字符串拷贝函数 5 7. memmove: 字块移动函数 6 8. memset:字符加载函数 7 9. strcat:字符串连接函数 8 10. strchr:字符串中字符首次匹配函数 9 11. strcmp:字符串比较函数 10 12. strcpy:字符串拷贝函数 11 13. strcspn:字符集逆匹配函数 11 14. strdup:字符串新建拷贝函数 12 15. strerror:字符串错误信息函数 13 16. strlen:计算字符串长度函数 14 17. strlwr:字符串小写转换函数 15 18. strncat:字符串连接函数 16 19. strncmp:字符串子串比较函数 16 20. strncpy:字符串子串拷贝函数 18 21. strpbrk:字符集字符匹配函数 19 22. strrchr:字符串中字符末次匹配函数 20 23. strrev:字符串倒转函数 21 24. strset:字符串设定函数 21 25. strspn:字符集匹配函数 22 26. strstr:字符串匹配函数 23 27. strtod:字符串转换成双精度函数 24 28. strtok:字符串分隔函数 25 29. strtol:字符串转换成长整型函数 26 30. strtoul:字符串转换成无符号长整型函数 27 31. strupr:字符串大写转换函数 28 32. strupr:字符串大写转换函数 29 1.​ atof:字符串转浮点型函数 函数原型:float atof(const char *str); 头文件:#include 是否是标准函数:是 函数功能:将字符串转换成浮点值,也就是将字符串str转换成浮点值然后获取转换后的结果。 返回值:返回转换后的浮点值 例程如下: 应用atol将字符串转换成浮点值。 #include #include int main(void) { char *str="12345.67"; float result; result=atof(str); printf("string=%s\nfloat =%f\n",str,result); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串作为待转换的字符串,声明的浮点型变量result用于获取转换结果。 (2)程序通过调用atol将字符串转换为相应的浮点型变量,获取转换结果,转换 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 与strtoX函数相同。 (3)最后将转换结果打印出来。 本例程的运行结果是: string =12345.67 float=12345.669922 注意:本例程中,转换成浮点数的结果有些奇怪,它并不等于我们字符串中变量的值,而是存在一定的误差,虽然误差很小,但是可以看出误差是从原字符串中的最后一位开始的,这是由于在转换过程中函数内部在实现时采用的转换方式造成的,如果想避免这种误差,可以使用strtoX系列函数。 2.​ atoi:字符串转整型函数 函数原型:int atoi(const char *str); 头文件:#include 是否是标准函数:是 函数功能:将字符串转换成整数值,也就是将字符串str转换成整型值然后获取转换后的结果。 返回值:返回转换后的整型值 例程如下: 应用atoi将字符串转换成整型值。 #include #include int main(void) { char *str="12345.67"; int result; result=atoi(str); printf("string=%s\ninteger=%d\n",str,result); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串作为待转换的字符串,声明的整型变量result用于获取转换结果。 (2)程序通过调用atoi将字符串转换为相应的整型变量,获取转换结果,转换规则与strtoX函数相同。 (3)最后将转换结果打印出来。 本例程的运行结果是: string =12345.67 integer=12345 3.​ atol:字符串转长整型函数 函数原型:long atol(const char *str); 头文件:#include 是否是标准函数:是 函数功能:将字符串转换成长整数值,也就是将字符串str转换成长整型值然后获取转换后的结果。 返回值:返回转换后的长整型值 例程如下: 应用atol将字符串转换成长整型值。 #include #include int main(void) { char *str="12345.67"; long result; result=atol(str); printf("string=%s\nlong =%ld\n",str,result); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串作为待转换的字符串,声明的长整型变量result用于获取转换结果。 (2)程序通过调用atol将字符串转换为相应的长整型变量,获取转换结果,转换规则与strtoX函数相同。 (3)最后将转换结果打印出来。 本例程的运行结果是: string =12345.67 long=12345 4.​ memchr:字符搜索函数 函数原型:void *memchr(void *s, char ch, unsigned n) 头文件:#include 是否是标准函数:是 函数功能:在数组的前n个字节中搜索字符 ch。 返回值:返回一个指针,它指向ch在s 中第一次出现的位置。如果在s的前n个字符中找不到匹配,返回NULL。 例程12.31应用函数memchr搜索一个字符串的子串。 #include #include int main(void) { char *str="I love China\n"; char *p; p=memchr(str,'C',strlen(str)); if(p) printf("%s",p); else printf("The character was not found\n") ; } 例程说明: (1)首先初始化字符串“I love China\n”,将首地址赋值给str。 (2)在字符串str中查找字符’C’出现的位置,并返回以第一个字符’C’开头的字符子串的指针。 (3)如果返回值不为NULL,打印该子串。 本例程的运行结果为: China 5.​ memcmp:字符串比较函数 函数原型:void *memcmp(char *s1, char *s2, unsigned n) 头文件:#include 是否是标准函数:是 函数功能:比较s1所指向的字符串与s2所指向的字符串的前n个字符。 返回值:根据s1所指向的对象的大于、等于、小于s2所指向的对象,函数memcmp分别返回大于、等于、小于0的值。 例程如下:比较两个字符串。 #include #include int main(void) { char *str1="ABCDEF"; char *str2="ABCDEf"; int s1,s2; s1=memcmp(str1,str2,6); s2=memcmp(str1,str2,5); printf("The comparison of 6 character\n"); if(s1>0)printf("%s>%s\n",str1,str2); else if(s1<0)printf("%s<%s\n",str1,str2); else printf("%s=%s\n",str1,str2); printf("The comparison of 5 character\n"); if(s2>0)printf("%s>%s\n",str1,str2); else if(s2<0)printf("%s<%s\n",str1,str2); else printf("%s=%s\n",str1,str2); } 例程说明: (1)首先初始化两个字符串“ABCDEF”和“ABCDEf”。 (2)然后应用函数memcmp将这两个字符串按照不同的字符个数进行比较,将返回的比较结果复制给变量s1和s2。 (3)显示比较结果。 本例程的运行结果为: The comparison of 6 character ABCDEF 是否是标准函数:是 函数功能:从source所指的对象中复制n个字符到destin所指的对象中。但是,如果这种复制发生在重叠对象之间,其行为是不可预知的。 返回值:destin 例程如下:利用函数memcpy进行字符串拷贝。 #include #include int main(void) { char *s = "##########"; char *d = "This is a test for memcpy function"; char *ptr; printf("destination before memcpy: %s\n", d); ptr = memcpy(d, s, strlen(s)); if (ptr) printf("destination after memcpy: %s\n", d); else printf("memcpy failed\n"); return 0; } 例程说明: (1)首先定义两个字符串s和d,并赋初值,且d的长度大于s。 (2)显示字符串d的原始内容。 (3)通过函数memcpy将字符串s复制到字符串d中,并返回字符串d的首指针。 (4)如果拷贝成功,再次显示字符串d的内容。 本例程的运行结果为: destination before memcpy: This is a test for memcpy function destination after memcpy: ##########test for memcpy function 注意: 1、memcpy与strcpy的不同在于应用memcpy进行字符串的拷贝可以指定拷贝串的长度。另外memcpy的参数为void指针类型,因此它还可以对非字符型对象进行操作,而strcpy只适用于字符串的拷贝。 2、前面提到,如果复制过程中发生在重叠对象之间,其行为是不可预知的。例如下面这个例子: #include #include int main(void) { char *d = "1234567890"; char *p; p=d+3; printf(" %s\n", d); memcpy(p, d, 6); printf(" %s\n", d); return 0; } 由于字符串p是字符串d的一个子串,在调用memcpy时,复制的字符串在d和p之间又重叠,因此该复制行为是不可预知的,结果也自然难以保证。这段程序的运行结果为: 1234567890 1231231230 显然这不是期望得到的结果。 7.​ memmove: 字块移动函数 函数原型:void *memmove(void *destin, void *source, unsigned n) 头文件:#include 是否是标准函数:是 函数功能:从source所指的对象中复制n个字符到destin所指的对象中。与memcpy不同的是,当对象重叠时,该函数仍能正确执行。 返回值:destin 例程如下:利用函数memmove进行字符块的移动 #include #include int main(void) { char *s = "##########"; char *d = "This is a test for memcpy function"; char *ptr; printf("destination before memmove: %s\n", d); ptr = memmove(d, s, strlen(s)); if (ptr) printf("destination after memmove: %s\n", d); else printf("memcpy failed\n"); return 0; } 例程说明: (1)首先定义两个字符串s和d,并赋初值,且d的长度大于s。 (2)显示字符串d的原始内容。 (3)通过函数memmove将字符串s复制到字符串d中,并返回字符串d的首指针。 (4)如果拷贝成功,再次显示字符串d的内容。 本例程的运行结果为: destination before memmove: This is a test for memcpy function destination after memmove: ##########test for memcpy function 注意: 与函数memcpy不同的是,当对象重叠时,该函数仍能正确执行。例如下面这个例子: #include #include int main(void) { char *d = "1234567890"; char *p; p=d+3; printf(" %s\n", d); memmove(p, d, 6); printf(" %s\n", d); return 0; } 虽然复制的字符串在d和p之间又重叠,但本段程序的运行结果为: 1234567890 1231234560 显然这是期望得到的结果。 这是因为函数memmove的复制行为类似于先从source对象中复制n个字符到一个与source和destin都不重合的含n个字符的临时数组中作为缓冲,然后从临时数组中再复制n个字符destin所指的对象中。 就本段程序而言,memmove先将字符串“123456”复制到一个临时数组中,再将它复制到以p为首地址的字符串中。 8.​ memset:字符加载函数 函数原型:void *memset(void *s, int c, unsigned n) 头文件:#include 是否是标准函数:是 函数功能:把c复制到s所指向的对象的前n个字符的每一个字符中。 返回值:s的值 例程如下:应用memset函数替换字符串中的字符。 #include #include int main(void) { char *str="AAAAAAAAAAAAAAAAAA"; printf("The original string is: %s\n",str); memset(str,'B',9); printf("The string after memset is:%s\n",str); } 例程说明: (1)首先初始化字符串“AAAAAAAAAAAAAAAAAA”, 将首地址赋值给str。 (2)显示该字符串。 (3)利用函数memset将字符串str的前9个字符替换为’B’。 (4)显示替换后的字符串。 本例程的运行结果为: The original string is: AAAAAAAAAAAAAAAAAA The string after memset is:BBBBBBBBBAAAAAAAAA 9.​ strcat:字符串连接函数 函数原型:char *strcat (char *dest,char *src); 头文件:#include 是否是标准函数:是 函数功能:将两个字符串连接合并成一个字符串,也就是把字符串src连接到字符串dest后面,连接后的结果放在字符串dest中 返回值:指向字符串dest的指针 例程如下: 应用strcat连接字符串。 #include #include int main( ) {   char dest[20]={“ ”}; char *hello = "hello ", *space = " ", *world = "world";   strcat(dest, hello);    strcat(dest, space); strcat(dest, world);    printf("%s\n", destination); getch();    return 0; } 例程说明: (1)首先,程序声明了一个字符数组和三个字符串变量,将字符数组dest初始化位空串,其余三个字符串变量分别赋予初值。 (2)程序通过调用strcat函数实现字符串的连接,首先将字符串hello添加到字符数组dest的末端,此时字符数组dest的值有空串变为"hello",然后继续调用两次strcat函数,依次将字符串space和字符串world陆续连接到字符数组dest的末端,从而完成整个字符串的连接操作。 (3)最后将最终的结果输出。 本例程的运行结果是: hello world 注意:本例程中,开始对字符数组dest初始化位空是必要的,对声明的变量进行初始化是一个很好的习惯,如果不对字符数组dest进行初始化程序会产生运行时的错误,有兴趣的读者可以试试未初始化程序的输出结果。 10.​ strchr:字符串中字符首次匹配函数 函数原型:char *strchr(char *str, char c); 头文件:#include 是否是标准函数:是 函数功能:在字符串中查找给定字符的第一次匹配,也就是在字符串str中查找字符c第一次出现的位置 返回值:第一次匹配位置的指针 例程如下: 应用strchr匹配字符串中字符。 #include #include int main(void) { char str[15] ={""}; char *ptr, c = 'r'; strcpy(str, "Hello World"); ptr = strchr(str, c); if (ptr) printf("The character %c is at position: %d\n", c, ptr-str); else printf("The character was not found\n"); strcpy(str, "Aloha"); if (ptr) printf("The character %c is at position: %d\n", c, ptr-str); else printf("The character was not found\n"); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串和一个字符数组以及一个字符,并对字符变量赋予了我们要查找的值。 (2)程序通过调用strcpy 赋予了字符数组一个值,然后调用strchr函数在字符数组中查找第一次与字符变量c匹配的字符,也就是查找第一个'r' 字符,返回的结果为指向第一个匹配字符的指针。根据返回值输出匹配结果。 (3)程序第二次通过调用strcpy 赋予了字符数组一个值,然后调用strchr函数在字符数组中查找第一次与字符变量c匹配的字符,也就是查找第一个'r' 字符,最后根据返回值输出匹配结果。 (4)第二次匹配已经给字符串重新赋值,我们理解新的字符串似乎应该是"Aloha",从而没有与'r'匹配的字符,但实际的运行结果却令人大吃一惊。这时因为在重新赋值时"Aloha"虽然将"Hello"覆盖掉,但是后面的字符仍然在数组中保留,因此在做匹配的时候仍然得到与第一次匹配相同的结果。 (5)对结果进行输出时,如果匹配成功,那么我们输出匹配的字符在数组中的位置,如果匹配不成功,则显示没有找到。 本例程的运行结果是: The character r is at position 8 The character r is at position 8 注意:本例程中,对字符串中字符匹配的返回值是指向匹配位置的指针,我们获取到该指针后,与数组的头指针做减法,也就是与数组变量名做减法,就可以获得我们得到的指针在数组中对应的下标。 11.​ strcmp:字符串比较函数 函数原型:int strcmp (char *str1,char * str2); 头文件:#include 是否是标准函数:是 函数功能:比较两个字符串的大小,也就是把字符串str1和字符串str2从首字符开始逐字符的进行比较,直到某个字符不相同或比较到最后一个字符为止,字符的比较为ASIC码的比较 返回值:若字符串str1大于字符串str2返回结果大于零,若字符串str1小于字符串str2返回结果小于零,若字符串str1等于字符串str2返回结果等于零 例程如下: 应用strcmp比较字符串大小。 #include #include int main(void) { char *str1 = "Canada", *str2 = "China", *str3 = "china"; int result; result = strcmp(str1, str2); if (result < 0) printf("%s is less than %s", str1,str2); else printf("%s is not less than %s", str1,str2); printf("\n"); result = strcmp(str2, str3); if (result < 0) printf("%s is less than %s", str2,str3); else printf("%s is not less than %s", str2,str3); getch(); return 0; } 例程说明: (1)首先,程序声明了三个字符串变量并分别赋予了初值,注意字符串str2和字符串str3的区别在于首字母是否大写,整型变量result用于 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 字符串的比较结果。 (2)程序通过调用strcmp函数比较字符串str1和字符串str2,在首字符相同的情况下第二个字符' a'的ASIC码小于' h'的ASIC码,因此比较结果为字符串str1小于字符串str2,返回结果小于零。第二次调用strcmp函数比较字符串str2和字符串str3,由于在ASIC码 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 中小写字母在后,小写字母的ASIC码大于大写字母,即' C'小于' c',因此比较结果为字符串str2小于字符串str3,返回结果小于零。 (3)最后将最终的结果输出,为了使输出结果一目了然,在两次比较中间的printf函数输出了一个换行。 本例程的运行结果是: Canada is less than China China is less than china 注意:本例程中,字符串的比较结果为首个两个不等字符之间ASIC码的差值,如果我们将第一次比较的结果result输出,应该是' a'的ASIC与码与' h'的ASIC码的差值,有兴趣的读者可以试试输出结果。 12.​ strcpy:字符串拷贝函数 函数原型: char * strcpy (char *dest,char * src); 头文件:#include 是否是标准函数:是 函数功能:实现字符串的拷贝工作,也就是把字符串src中的内容拷贝到字符串dest中,使两个字符串的内容相同。 返回值:指向字符串dest的指针 例程如下: 应用strcpy实现字符串拷贝。 #include #include int main(void) { char dest[20] ={""}; char *src = "Hello World"; int result; strcpy(dest,src); printf("%s\n", dest); result=strcmp(dest,src); if(!result) printf("dest is equal to src"); else printf("dest is not equal to src"); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串和一个字符数组并给分别赋予了初值,整型变量result用于记录字符串子串的比较结果。 (2)程序通过调用strcpy函数将字符串src中的内容拷贝到字符数组dest中,使得两者具有相同的内容。为了验证两个变量中的内容是否真的一样,通过调用strcmp对两个字符串中的内容进行比较。 (3)最后将拷贝结果和比较结果输出。 本例程的运行结果是: Hello World dest is equal to src 注意:本例程中,向字符数组中赋值时要保证字符数组中有足够的空间,虽然有时候即便空间不够也会打印出正确的结果,但随着程序的运行,不能保证超出下标范围的部分还能以正确的型式存在。 13.​ strcspn:字符集逆匹配函数 函数原型:int strcspn(char *str1, char *str2); 头文件:#include 是否是标准函数:是 函数功能:在字符串中查找第一个属于字符集的下标,即从开始有多少个字符不属于字符集,也就是在字符串str1中查找第一个属于字符集str2中任何一个字符的下标,即字符串str1中从开始一直有多少个字符不属于字符集str2中的字符。 返回值:所找到的字符串中段的长度 例程如下: 应用strspn逆匹配字符串中字符集。 #include #include int main(void) { char *str1="tomato",*str2="carrot"; char *str= "abc"; int result; result = strcspn(str1,str); if(result) printf("The first %d is congruent\n",result); else printf("No character is congruent\n"); result = strcspn(str2,str); if(result) printf("The first %d is congruent\n",result); else printf("No character is congruent\n"); getch(); return 0; } 例程说明: (1)首先,程序声明了三个字符串并分别赋予初值,其中最后一个变量是用于逆匹配的字符集。 (2)程序通过调用strcspn进行字符集的逆匹配,它从字符串str1中的第一个字符开始检查是不是属于字符串str中的任意字符,如果不属于就继续逆匹配,直到逆匹配不成功,本例中会发现直到遇到字符'a'才逆匹配失败,因为字符'a'属于字符串str中的某个字符。然后输出匹配结果。 (3)程序第二次通过调用strspn对字符串str2进行字符集逆匹配,发现第一个字符即属于字符集str中的某字符。 (4)输出匹配结果是显示前多少个字符逆匹配成功。 本例程的运行结果是: The first 3 is congruent No character is congruent 注意:本例程中,字符集逆匹配与字符集匹配两者的匹配方式截然相反,字符串匹配是当字符串中字符等于字符集中任意字符是匹配成功,字符串逆匹配是当字符串中字符不等于字符集中任意字符是匹配成功。 14.​ strdup:字符串新建拷贝函数 函数原型:char *strdup(char *str); 头文件:#include 是否是标准函数:是 函数功能:将字符串拷贝到新分配的空间位置,也就是将str拷贝到一块新分配的存储空间,其内部使用动态分配内存技术实现的,分配给字符串的空间来自于当前所用内存模式制定的堆。 返回值:返回指向含有该串拷贝的存储区 例程如下: 应用strdup将字符串拷贝到新建位置处。 #include #include int main(void) { char *src="This is the buffer text"; char *dest; dest=strdup(src); if(!strcmp(src,dest)) printf("Copy success\n%s\n",dest); else printf("Copy failure"); free(dest); getch(); return 0; } 例程说明: (1)首先,程序声明了两个字符串并给第一个字符串赋于初值,此时并未给字符串dest分配任何空间。 (2)程序通过调用strdup将字符串拷贝到新建位置处,通过动态分配内存技术将新分配一个与字符串src大小相同的存储区并完成字符串的复制工作,然后返回该存储区并让dest指向该区域。 (3)程序通过调用strcmp比较复制前后的字符串,如果复制成功而这应当相同,函数返回值为零,并打印拷贝结果。 (4)由于新分配的存储区是通过动态分配内存技术实现的,因此在程序退出之前要将分配的存储区显示的释放。 本例程的运行结果是: Copy success This is the buffer text 注意:本例程中,初学者往往会忽视释放动态分配存储区的操作,虽然表面看起来似乎对程序没有什么影响,但实际上不对存储区进行回收会造成内存泄漏,在一些大程序会造成致命的后果。 15.​ strerror:字符串错误信息函数 函数原型:char *strerror(int errnum); 头文件:#include 是否是标准函数:是 函数功能:获取程序出现错误的字符串信息,也就是根据错误代码errnum查找到具体的错误信息。 返回值:返回错误信息 例程如下: 应用strerror查看几种错误信息。 #include #include int main(void) { char *error; int i; for(i=0;i<12;i++) { error=strerror(i); printf("%s",error); } getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串用于获取错误信息,声明的整型变量既作为循环变量又作为错误信息代码。 (2)程序通过调用strerror根据错误代码获取到具体的错误信息,其中这些代表具体错误信息的字符串在相应的头文件中定义。循环只取了前十二种错误信息,实际的错误种类还有更多。 (3)每次循环将具体错误信息打印出来。 本例程的运行结果是: Error 0 Invalid function number No such file or directory Path not found Too many open files Permission denied Bad file number Memory arena trashed Not enough memory Invalid memory block address Invalid environment Invalid format 注意:本例程中,如果读者有兴趣,不妨看看一共系统定义了多少种错误信息,通过更改循环变量将各种错误信息打印出来。 16.​ strlen:计算字符串长度函数 函数原型: int strlrn (char *str); 头文件:#include 是否是标准函数:是 函数功能:求字符串的长度,也就是求字符串str中有多少个字符 返回值:字符串str字符的个数 例程如下: 应用strlen求字符串长度。 #include #include int main(void) { char src1[3]={""},src2[10]={"Hello"}; char *src3="Hello"; printf("%d\n",strlen(src1)); printf("%d\n",strlen(src2)); printf("%d\n",strlen(src3)); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串和两个字符数组并给分别赋予了初值,我们将字符串src3与字符数组src2赋予相同的初值。 (2)程序通过调用strlen函数分别求出三个变量字符的长度。在求字符长度时,返回的结果是有效字符的个数,因此虽然字符数组src1由十个字符变量组成,但初值为空串,因此长度为零,并不等于数组长度。由于字符串src3与字符数组src2赋予相同的初值,因此两者长度相同。 (3)最后将字符串或字符数组的长度值输出。 本例程的运行结果是: 0 5 5 注意:本例程中,如果将字符数组src2拷贝到字符数组src1中,并不会产生任何编译错误,但是程序运行时会产生不可预知的结果,有兴趣的读者可以试试完成拷贝后将三个变量的长度输出。 17.​ strlwr:字符串小写转换函数 函数原型:char *strlwr(char *str,); 头文件:#include 是否是标准函数:否 函数功能:将字符串原有大写字符全部转换为小写字符,也就是将字符串str中的所有字符变成小写。 返回值:返回指向被转换字符串的指针 例程如下: 应用strlwr将字符串转换成小写字符。 #include #include int main(void) { char *s="You'll Never Walk Alone"; printf("%s",strlwr(s)); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符串为待转换字符串并赋予初值。 (2)程序通过调用strlwr将字符串中的所有大写字符转换成小写字符,并返回转换后的结果。 (3)最后将转换结果打印出来。 本例程的运行结果是: you'll never walk alone 18.​ strncat:字符串连接函数 函数原型:char *strncat (char *dest, char *src, int n); 头文件:#include 是否是标准函数:是 函数功能:将一个字符串的子串连接到另一个字符串末端,也就是把字符串src的前n个字符连接到字符串dest后面,连接后的结果放在字符串dest中 返回值:指向字符串dest的指针 例程如下:应用strncat连接字符串子串。 #include #include #include int main(void) { char dest[30]={""}; char *favorite = "I love", *tabs = "\t\n", *language = "C++"; strcnat(dest, favorite,6); strncat(dest, tabs,1); strncat(dest, language,1); printf("%s\n", dest); getch(); return 0; } 例程说明: (1)首先,程序声明了一个字符数组和三个字符串变量,将字符数组dest初始化位空串,其余三个字符串变量分别赋予初值,其中字符串tans由两个字符组成,一个制表符和一个换行符。 (2)程序通过调用strncat函数实现字符串子串的连接,首先将字符串favorite的前六个字符添加到字符数组dest的末端,其效果与直接调用strcat函数相同,然后继续调用两次strncat函数,依次将字符串tabs和字符串language的首字符陆续连接到字符数组dest的末端,从而完成整个字符串子串的连接操作。 (3)最后将最终的结果输出,由于未将字符串tabs中的换行符添加到字符数组dest中,因此所有输出结果应在同一行。 本例程的运行结果是: I love C 注意:本例程中,字符串tabs中的内容比较新奇,它并不是我们一般的字符,而是两个转义说明符构成的特殊字符,C语言内部在处理过程中遇到转义说明符时会作特殊处理,本例中会将' \t'看做制表符,将' \n'看做换行符。 19.​ strncmp:字符串子串比较函数 函数原型: int strncmp (char *str1,char * str2, int n); 头文件:#include 是否是标准函数:是 函数功能:比较两个字符串子串的大小,也就是把字符串str1的前n个字符组成的子串和字符串str2的前n个字符组成的子串进行比较,从首字符开始逐字符的进行比较,直到某个字符不相同或比较到第n个字符为止。 返回值:若字符串str1前n个字符组成的子串大于字符串str2前n个字符组成的子串返回结果大于零,若字符串str1前n个字符组成的子串小于字符串str2前n个字符组成的子串返回结果小于零,若字符串str1前n个字符组成的子串等于字符串str2前n个字符组成的子串返回结果等于零 例程如下: 应用strncmp比较字符串子串大小。 #include #include int main(void) { char *str1="Hello World"; char *str2="Hello C Programme"; int result; result=strncmp(str1,str2,5); if(!result) printf("%s is identical to %s in the first 5 words",str1,str2); else if(result<0) printf("%s is less than %s in the first 5 words",str1,str2); else printf("%s is great than %s in the first 5 words",str1,str2); printf("\n"); result=strncmp(str1,str2,10); if(!result) printf("%s is identical to %s in the first 10 words",str1,str2); else if(result<0) printf("%s is less than %s in the first 10 words",str1,str2); else printf("%s is great than %s in the first 10 words",str1,str2); getch(); return 0; } 例程说明: (1)首先,程序声明了两个字符串变量并分别赋予了初值,整型变量result用于记录字符串子串的比较结果。 (2)程序通过调用strncmp函数比较字符串str1和字符串str2的前5个字符组成的子串,由于两个字符串的前五个字符相同,因此两个子串的比较结果应为相等,返回结果为零。然后将比较结果输出。 (3)程序第二次调用strncmp函数比较字符串str2和字符串str3的前10个字符组成的子串,由于从第七个字符开始出现不等的情况,分别为' w'和' C',根据ASIC码表中小写字母在后,即' w'的ASIC码大,返回结果大于零。最后输出比较结果。 (4)输出时显示的输出比较结果并指明比较范围。 本例程的运行结果是: Hello World is identical to Hello C Programme in the first 5 words Hello World is great than Hello C Programme in the first 10 words 注意:本例程中,要注意子串比较的过程中子串的大小应不小于零且不超过字符串的长度,虽然子串的长短参数不会产生编译时的错误和最终结果的输出,但在比较前检查比较范围是一个很好的习惯。 20.​ strncpy:字符串子串拷贝函数 函数原型: char * strncpy (char *dest,char * src, int n); 头文件:#include 是否是标准函数:是 函数功能:实现字符串子串的拷贝工作,也就是把字符串src中的前n个字符拷贝到字符串dest中。 返回值:指向字符串dest的指针 例程如下: 应用strncpy实现字符串子串拷贝。 #include #include int main(void) { char dest[20]={""}; char *src1="Hello World",*src2 ="Aloha"; strncpy(dest,src1,5); strncpy(dest,src2,5); if(!strcmp(dest,src1)) printf("dest is equal to src1"); else if(!strcmp(dest,src2)) printf("dest is equal to src2"); else printf("dest is %s",dest); printf("%s\n", dest); getch(); return 0; } 例程说明: (1)首先,程序声明了两个字符串和一个字符数组并分别赋予了初值,本例中省去了用于记录比较结果result变量。 (2)程序通过调用strncpy函数将字符串src1中的前五个字符组成的子串拷贝到字符数组dest中,然后又将调用strncpy函数将字符串src2中的前五个字符组成的子串拷贝到字符数组dest中。通过调用一系列的strcmp字符串比较函数,从而达到验证dest变量中的最终内容的目的。 (3)最终的字符串dest中内容的到底是什么呢,是"Hello",还是"Aloha",亦或是" HelloAloha"。通过第一次调用strncpy函数,字符串dest中的内容由空串变成"Hello",再次调用strncpy函数则会从字符串dest的下标为零处逐一覆盖,也就是"Aloha"覆盖了原来的" Hello ",并不是将"Aloha"添加到末端。 (4)最后将拷贝结果和验证结果输出。 本例程的运行结果是: Aloha dest is equal to src2 注意:本例程中,在检验字符串dest的内容时,if判断中并没有使用像上例中的result变量,我们只关心比较的结果是否为零,直接通过将函数作为判断条件,从而利用函数的返回值进行判断是一个简单而有效的方法。 21.​ strpbrk:字符集字符匹配函数 函数原型:char *strpbrk(char *str1, char *str2); 头文件:#include 是否是标准函数:是 函数功能:在字符串中查找第一个属于字符集的字符位置,也就是在字符串str1中查找第一个属于字符集str2中任意字符的位置。 返回值:返回第一个匹配字符的指针 例程如下: 应用strpbrk匹配字符集字符。 #include #include int main(void) { char *str1="There are 5 pigs in the hogpen"; char *str2="0123456789"; char *result; result = strpbrk(str1,str2); if(result) printf("%s\n",result++); else printf("There are no numbers any more"); result = strpbrk(result,str2); if(result) printf("%s\n",result++); else printf("There are no numbers any more"); getch(); return 0; } 例程说明: (1)首先,程序声明了三个字符串变量并给前两个变量赋予初值,其中字符指针result用于记录匹配字符的位置。 (2)程序通过调用strcspn进行字符集字符的匹配,它从字符串str1中查找第一个属于字符集str2中任意字符的字符,具体到本例中就是在字符串str1种查找第一个数字字符,如果匹配成功我们会获得指向第一个数字字符的指针,利用该返回值输出匹配结果。 (3)然后我们在上一次匹配字符的下一个字符作为首字符的子串中继续匹配,程序第二次通过调用strspn完成上述功能,并用同样的输出方式输出匹配结果,如没有数字字符可以获得显示匹配失败。 (4)输出匹配结果时我们并没有将匹配的字符输出,取而代之的是将以匹配字符作为第一个字符的字符串字串输出。 本例程的运行结果是: 5 pigs in the hogpen There are no numbers any more 注意:本例程中,值得注意的是匹配成功时结果的输出。由于获得了匹配成功的字符的指针,因此我们可以利用该指针输出字符串的字串,利用自增操作符我们移动一个位置又可以对尚未匹配的子串继续进行下一次匹配。 22.​ strrchr:字符串中字符末次匹配函数 函数原型:char *strrchr(char *str, char c); 头文件:#include 是否是标准函数:是 函数功能:在字符串中查找给定字符的最后一次匹配,也就是在字符串str中查找字符c最后一次出现的位置 返回值:最后一次匹配位置的指针 例程如下: 应用strrchr匹配字符串中字符。 #include #include int main(void) { char str[15]={""}; char *ptr, c = 'o'; strcpy(str, "Hello World"); ptr = strchr(str, c); if (ptr) printf("The first character %c is at positio
本文档为【c语言函数库-第四章(字符串函数)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_086260
暂无简介~
格式:doc
大小:245KB
软件:Word
页数:29
分类:互联网
上传时间:2011-05-27
浏览量:26