1.strcpy使用
使用这个函数我们可以进行字符串拷贝。它有两个参数,第一个参数是指向目标空间,第二个参数是指向需要拷贝的字符串。返回值为拷贝完成后指向的字符串首地址。头文件为<string.h>
演示如下:
注意:
• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷贝到目标空间。
• 目标空间必须足够大,以确保能存放源字符串。
• 目标空间必须可修改。
2.strcpy模拟实现
#include<assert.h>
#include<stdio.h>
char* my_strcpy(char*p1,const char*p2)
{
char* pt = p1;
assert(p1 && p2);
while (*p2)
{
*p1++ = *p2++;
}
return pt;
}
int main()
{
char arr[] = "i love you";
char arr1[30] = { 0 };
char *pt=my_strcpy(arr1, arr);
printf(pt);
return 0;
}
我们首先使用assert断言p1和p2不能为NULL,然后使用whlie循环,正常情况下我们这个代码是不会拷贝\0的但是我们的目标空间都是0,所以我们即使不拷贝\0也没问题。
3.strcat的使用
字符串的追加。它有两个参数,第一个参数指向目标的空间,第二个参数指向需要追加的字符串。
返回值为指向目标空间的首元素地址。strcat是从目标空间的‘\0’,位置开始追加,并以追加字符串的‘\0’,作为结束标志。头文件为<string.h>
演示如下:
注意:
• 源字符串必须以 '\0' 结束。
• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
• 目标空间必须有足够的大,能容纳下源字符串的内容。
• 目标空间必须可修改。
4.strcat模拟实现
char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
我们还是需要用assert断言来判断传入指针不为空指针。并且我们还需要使用一个指针保存目标空间首元素地址,然后最后返回它即可。
5.strcmp的使用
我们之前在比较结构体的时候使用过。它是按照字符的ASCLL码值进行比较的。头文件为<string.h>
下面是演示:
标准规定:
◦ 第一个字符串大于第二个字符串,则返回大于0的数字。
◦ 第一个字符串等于第二个字符串,则返回0。
◦ 第一个字符串小于第二个字符串,则返回小于0的数字。
6.strcmp的模拟实现
#include<assert.h>
#include<stdio.h>
int my_strcmp(const char* str1, const char* str2)
{
int ret = 0;
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr[] = "abcdef";
char arr1[] = "bcdef";
int ret=my_strcmp(arr, arr1);
if (ret < 0)
{
printf("小于\n");
}
else if (ret == 0)
{
printf("等于\n");
}
else
printf("大于\n");
return 0;
}
大家可以思索思索,又不有啥缺陷。