字符串合并函数的实现
#include<stdio.h>
#include<assert.h>
//字符串合并函数
//"abcde"+"xyz" ->"abcdexyz"
char* My_strcat(char* des, const char* src)
{
assert(des != NULL && src != NULL);
//1.让指针p 指向des的结尾标志'\0'
char* p = des;
while (*p != '\0')
{
p++;
}
//从p开始拷贝 拷贝src的值
while (*p++ = *src++);
return des;
}
int main()
{
const char str[] = "abcde";
char des[10] = "xzcv";
printf("%s\n", My_strcat(des,str));
return 0;
}
字符串比较函数两种比较条件下的实现
#include<stdio.h>
#include<assert.h>
//字符串比较函数
//"abc" == "abc" "abc"<"ayz" "xyz" > "abc" "abc" < "abcd" "abcd" > "abc"
int My_strcmp(const char *string1, const char *string2)
{
assert(string1 != NULL && string2!=NULL);
if(NULL == string1 || NULL == string2)
return -2;
while((*string1 == *string2) && (*string1 != '\0'))
{
string1++;
string2++;
}
int tmp = *string1 - *string2;
if(tmp == 0)
{
return 0;
}
else if(tmp > 0)
{
return 1;
}
else
{
return -1;
}
}
//比较两个字符串前n个值 是否相等 如果count过大,那正常比较
int My_strncmp(const char *string1, const char *string2, int count)
{
assert(string1 != NULL && string2!=NULL);
if(NULL == string1 || NULL == string2)
return -2;
//1.两个不相等 2.相等但是是'\0' 3.需要比较的个数count 已经比较完毕
//如果写成count-- 则会让循环体代码多执行一次
while(--count &&(*string1 == *string2) && (*string1 != '\0'))
{
string1++;
string2++;
}
int tmp = *string1 - *string2;
if(tmp == 0)
{
return 0;
}
else if(tmp > 0)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
const char des[] = "abcdw";
const char str[] = "abcde";
printf("%d\n", My_strcmp(des,str));
printf("%d\n", My_strncmp(des, str,3));
return 0;
}