第4篇字符串处理函数
本章介绍字符串处理函数。在C语言中字符串是一个重要的概念,字符串处理函数是针对字符串进行操作(字符串比较,字符串拷贝等)的一系列库函数,主要定义在string.h 头文件中。本章将介绍一些常用的字符串处理函数,其中包括一些非标准函数。
4.1 strcat字符串连接函数
函数原型:char *strcat (char *dest,char *src);
头文件:#include<string.h>
是否是标准函数:是
函数功能:将两个字符串连接合并成一个字符串,也就是把字符串src连接到字符串dest 后面,连接后的结果放在字符串dest中
返回值:指向字符串dest的指针
例程12-1 应用strcat连接字符串。
#include <string.h>
#include <stdio.h>
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进行初始化程序会产生运行时的错误,有兴趣的读者可以试试未初始化程序的输出结果。
4.2 strncat字符串连接函数
函数原型:char *strncat (char *dest, char *src, int n);
头文件:#include<string.h>
是否是标准函数:是
函数功能:将一个字符串的子串连接到另一个字符串末端,也就是把字符串src的前n 个字符连接到字符串dest后面,连接后的结果放在字符串dest中
返回值:指向字符串dest的指针
例程12-2应用strncat连接字符串子串。
#include <string.h>
#include <string.h>
#include <stdio.h>
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'看做换行符。
4.3 strcmp字符串比较函数
函数原型:int strcmp (char *str1,char * str2);
头文件:#include<string.h>
是否是标准函数:是
函数功能:比较两个字符串的大小,也就是把字符串str1和字符串str2从首字符开始
逐字符的进行比较,直到某个字符不相同或比较到最后一个字符为止,字符的比较为ASIC 码的比较
返回值:若字符串str1大于字符串str2返回结果大于零,若字符串str1小于字符串str2返回结果小于零,若字符串str1等于字符串str2返回结果等于零
例程12-3 应用strcmp比较字符串大小。
#include <string.h>
#include <stdio.h>
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码表中小写字母在后,小写字母的ASIC码大于大写字母,即' C'小于' c',因此比较结果为字符串str2小于字符串str3,返回结果小于零。
(3)最后将最终的结果输出,为了使输出结果一目了然,在两次比较中间的printf函数输出了一个换行。
本例程的运行结果是:
Canada is less than China
China is less than china
注意:本例程中,字符串的比较结果为首个两个不等字符之间ASIC码的差值,如果我们将第一次比较的结果result输出,应该是' a'的ASIC与码与' h'的ASIC码的差值,有兴趣的读者可以试试输出结果。
4.4 strncmp字符串子串比较函数
函数原型:int strncmp (char *str1,char * str2, int n);
头文件:#include<string.h>
是否是标准函数:是
函数功能:比较两个字符串子串的大小,也就是把字符串str1的前n个字符组成的子串和字符串str2的前n
个字符组成的子串进行比较,从首字符开始逐字符的进行比较,直到某个字符不相同或比较到第n个字符为止。
返回值:若字符串str1前n个字符组成的子串大于字符串str2前n个字符组成的子串返回结果大于零,若字符串str1前n个字符组成的子串小于字符串str2前n个字符组成的子串返回结果小于零,若字符串str1前n个字符组成的子串等于字符串str2前n个字符组成的子串返回结果等于零
例程12-4 应用strncmp比较字符串子串大小。
#include <string.h>
#include <string.h>
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
注意:本例程中,要注意子串比较的过程中子串的大小应不小于零且不超过字符串的长度,虽然子串的长短参数不会产生编译时的错误和最终结果的输出,但在比较前检查比较范围是一个很好的习惯。
4.5 strcpy字符串拷贝函数
函数原型:char * strcpy (char *dest,char * src);
头文件:#include<string.h>
是否是标准函数:是
函数功能:实现字符串的拷贝工作,也就是把字符串src中的内容拷贝到字符串dest 中,使两个字符串的内容相同。
返回值:指向字符串dest的指针
例程12-5 应用strcpy实现字符串拷贝。
#include <stdio.h>
#include <string.h>
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
注意:本例程中,向字符数组中赋值时要保证字符数组中有足够的空间,虽然有时候即便空间不够也会打印出正确的结果,但随着程序的运行,不能保证超出下标范围的部分还能以正确的型式存在。
4.6 strncpy字符串子串拷贝函数
函数原型:char * strncpy (char *dest,char * src, int n);
字符串函数详解头文件:#include<string.h>
是否是标准函数:是
函数功能:实现字符串子串的拷贝工作,也就是把字符串src中的前n个字符拷贝到字
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论