strcpy
strcpy是库函数提供的拷贝函数,其含义是,将源地址空间里的字符串拷贝到目标字符串中,是针对字符串的一种操作,该函数有两个参数,两个参数的类型都是char*,第一个参数是目标地址,第二个参数是源地址;
例如
char str1[10];
char str2[]=”China”;
strcpy(str1,str2)
输出:China
实现思路:
1、通常字符串最后一个位置都会有一个默认的’\0’,定义两个指针,分别指向源地址的起始地址和目标地址的起始地址;
2、将源字符串一个一个的赋值给目标字符串,当源字符串遇到‘\0’时,赋值结束;
3、在目标字符串后面给他加上’\0’;
4、返回目标地址空间的首地址;
代码实现:
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* str1, char* str2)
{
assert(str2);//判断源地址是否为空;
char* cur = str1;
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
*str1 = '\0';
return cur;
}
int main()
{
char str1[10];
char str2[10] = "China";
printf("%s\n", my_strcpy(str1, str2));
return 0;
}
运行结果:
strcmp
strcmp是库函数提供的字符串比较函数,其含义是,将源地址空间里的字符串与目标字符串相互比较,是针对字符串的一种操作,该函数有两个参数,两个参数的类型都是char*,第一个参数是目标地址,第二个参数是源地址;
比较规则:
对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
如果两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”,还要特别注意:小写字母比大写字母“大”。
返回值:
(1)字符串1=字符串2,返回0;
(2)字符串1>字符串2,返回1;
(3)字符串1<字符串2,返回-1;
实现思路:
1、通常字符串最后一个位置都会有一个默认的’\0’,定义两个指针,分别指向源地址的起始地址和目标地址的起始地址;
2、将源字符串与目标字符串一个一个的比较,当源字符串与目标字符串不相等的时候,循环结束,并且对当前字符进行比较,当源字符比目标字符的ASCII大时,返回1,当源字符比目标字符的ASCII小时,返回-1;
3、当目标或源字符串走到’\0’时,判断两个字符是否都走到了‘\0’,如果是,则返回0;
实现代码:
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
while (*str1++ == *str2++)
{
if (*str1 == '\0')
return 0;
}
if (*str1 - *str2) //不等的情况
return 1;
else
return -1;
}
int main()
{
char str3[10] = "Hello";
char str4[10] = "China";
printf("%d\n", my_strcmp(str3, str4));
return 0;
}
运行结果: