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");}elseprintf("大于\n");return 0;
}
大家可以思索思索,又不有啥缺陷。