建站之星 discuz,wordpress社交旅游,计算机软件网站建设,济南机场建设1.复制函数--------------strcpy函数
函数使用 char*strcpy#xff08;char* destination, const char* source#xff09; strcpy函数用于拷贝字符串#xff0c;即将一个字符串中的内容拷贝到另一个字符串中#xff08;会覆盖原字符串内容#xff09;。它的参数是两个指…1.复制函数--------------strcpy函数
函数使用 char*strcpychar* destination, const char* source strcpy函数用于拷贝字符串即将一个字符串中的内容拷贝到另一个字符串中会覆盖原字符串内容。它的参数是两个指针第一个指针指向目标字符串的首地址即要拷贝到什么地方。第二个指针指向来源字符串的首地址即用什么字符串拷贝。返回值是目标字符串的首地址。 #includestdio.h
#includestring.h
int main()
{//char* p NULL;//p zhangsan;//p是指针变量可以赋值将z的地址赋值给p//char name[20] xxxxxxxxxx;//name zhangsan;//err,name数组名是地址地址是一个常量值不能被赋值name已经被固定死了char name1[20] xxxxxxxxxx;char str1[] zhang\0san;strcpy(name1, str1);printf(%s\n, name1);char name2[20] xxxxxxxxxx;char str2[] { b,i,t };strcpy(name2, str2);printf(%s\n, name2);//char* p abcdef;//p指向常量字符串存放a的地址常量字符串是不能修改的//char arr[] bit;//strcpy(p, arr);//err//char p[] abcdef;//将其放入数组中使其变成变量可以修改//char arr[] bit;//strcpy(p, arr);//rightreturn 0;
}模拟实现 复制到时候函数会将被拷贝字符串的‘/0’一同复制到目标字符串当字符串没有‘/0‘时会一直向后查找直到找到
总结
源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大以确保能存放源字符串。目标空间必须可修改。
.模拟实现
进入函数体时先定义一个指针变量保存目标空间的起始位置便于之后返回。然后将源字符串中的字符一一赋值给目标空间直到遇到源字符串中的’\0’将’\0’也赋值给目标空间后结束赋值并返回目标空间的起始位置。
#includeassert.h
char* my_strcpy(char* destination, const char* source)
{assert(str ! NULL);//断言若str为NULL报错头文件assert.h//或者直接assert(destination source);char* str destination;//保存目标空间的起始位置while (*source ! \0)//或者直接while (*source){*destination *source;}*destination *source;return str;
}二.strcat字符串追加 char *strcat( char* destination, const char* Source ); strcat函数用于追加字符串即将一个字符串中的内容追加到另一个字符串中。它的参数是两个指针
第一个指针指向目标字符串的首地址即要追加到什么地方。第二个指针指向来源字符串的首地址即用什么字符串追加。返回值是目标字符串的首地址。
#includestdio.h
#includestring.h
int main()
{char arr1[20] hello ;char arr2[] world;strcat(arr1, world);printf(%s\n, arr2);char arr3[20] hello ;char arr4[] { a,b,c,d,e,f };strcat(arr3, arr4);printf(%s\n, arr3);return 0;
}三.strcmp字符串比较
1.函数使用 int strcmp(const char* str1,const char* str2) strcmp函数用于比较两个字符串内容的函数。
它的参数是两个指针
指针分别指向两个待比较字符串的首地址。它的返回值是一个整型数字。 依次比较的是对应字符的ASCII值。
当str1 str2的时候返回正数。当str1 str2的时候返回0。当str1 str2的时候返回负数。 //错误的写法
#includestdio.h
int main()
{char arr1[] zhangsan;char arr2[] zhangsan;if (arr1 arr2)printf(\n);elseprintf(!\n);//输出!return 0;
} //正确的比较方法
#includestdio.h
#includestring.h
int main()
{char arr1[] zhangsan;char arr2[] zhangsan;int ret strcmp(arr1, arr2);if (ret 0)printf(\n);else if (ret 0)printf(\n);//输出elseprintf(\n);return 0;
}第⼀个字符串大于第⼆个字符串则返回大于0的数字。第⼀个字符串等于第⼆个字符串则返回0。第⼀个字符串小于第⼆个字符串则返回⼩于0的数字。
那么如何判断两个字符串 比较两个字符串中对应位置上字符ASCII码值的大小。 2.模拟实现
进入函数体直接比较起始位置的字符的大小。如果相同并且不为’\0’那么继续比较下一对字符的大小如果相同并且为’\0’那么说明字符串比较完毕那么直接返回0如果不同则直接返回str1与str2中对应字符的ASCII值的差值当str1中对应字符大于str2中的对应字符时返回正值当str1中对应字符小于str2中的对应字符时返回负值。
#includeassert.h
int my_strcmp(const char* str1, const char* str2)
{assert(str1 str2);//断言若str为NULL报错头文件assert.hwhile (*str1 *str2){//遇到都为\0的时候说明字符串相等返回0if (*str1 \0)return 0;str1;str2;}return (*str1 - *str2);
}