1、模拟实现strcat函数(字符串追加函数):
#include <stdio.h>
#include <assert.h>
char* My_strcat(char* a, char* b)
{
assert(a);
assert(b);
char* q = a;
while (*a != '\0')
{
a++;
}
while ((*a = *b))
{
a++;
b++;
}
return q;
}//模拟strcat函数
int main()
{
char str[50] = "hello";
char* p = "world!";
char* q = My_strcat(str,p);
printf("%s\n", q);
return 0;
}
2、模拟实现strncat函数
#include <stdio.h>
#include <assert.h>
char* My_strncat(char* a, char* b,int n)
{
assert(a);
assert(b);
char* q = a;
int cun = 0;
while (*a)
{
a++;
}
while ((*a = *b))
{
a++;
b++;
cun++;
if (cun == n)
{
*a = '\0';
break;
}
}
return q;
}//模拟实现strncat函数
int main()
{
//模拟实现strncat函数
char str1[50] = "nanshe";
char* p1 = "hasan";
char* q1 = My_strncat(str1, p1,3);
printf("%s\n", q1);
return 0;
}
3、模拟实现strstr函数(找子串函数)
#include <stdio.h>
#include <assert.h>
char* My_strstr(char* a, char* b)
{
assert(a);
assert(b);
char* q = NULL;
while (*a != '\0')
{
if (*a == *b)
{
q = a;//当a的内容等于b的第一个字符时候让q记录a的位置;
break;
}
a++;
}//让a走到跟b第一个字符相等的位置
if (*a == '\0')
{
return NULL;
}//若是a走完了也没有字符跟b的首字符相等则返回NULL
while (*b != '\0')
{
if (*a == *b)
{
a++;
b++;
}
else
{
return NULL;
}
}
return q;
}//模拟实现strstr函数
int main()
{
//模拟实现strstr函数(找字串函数)
char* str2 = "abcdefg";
char* p2 = "abcdee";
char* q2 = My_strstr(str2, p2);
if (q2 == NULL)
{
printf("p2不是str2的子串\n");
}
else
{
printf("p2是str2的子串:%s\n", q2);
}
return 0;
}
4、模拟实现strlen函数
#include <stdio.h>
#include <assert.h>
int My_strlen(const char* a)
{
assert(a);
int cun = 0;
while (*a != '\0')
{
a++;
cun++;
}
return cun;
}//模拟实现strlen函数
int main()
{
//模拟实现strlen函数
char* str3 = "abcdefg";
int len = My_strlen(str3);
printf("str3字符串的长度为:%d\n", len);
return 0;
}
5、模拟实现strcpy函数,(要给定目标字符换的大小,用数组封装)
#include <stdio.h>
#include <assert.h>
char* My_strcpy(char* a, const char* b)
{
assert(a);
assert(b);
char* q = a;
while (*b != '\0')
{
if (*a == '\0')
{
return "cuo wu!";
break;
}
*a = *b;
a++;
b++;
}
if (*b == '\0')
{
*a = *b;
}
return q;
}//模拟实现strcpy函数;
int main()
{
//模拟实现strcpy函数,(要给定目标字符换的大小,用数组封装)
char str4[10] = "abcdehjk";
char* p4 = "cd";
char* q4 = My_strcpy(str4, p4);
printf("%s\n", str4);
return 0;
}
6、模拟实现strncpy函数
#include <stdio.h>
#include <assert.h>
char* My_strncpy(char* a, char* b, int n)
{
assert(a);
assert(b);
char* q = a;
int cun = 0;
while (*b != '\0')
{
*a = *b;
cun++;
a++;
b++;
if (cun == n)
{
*a = '\0';
break;
}
}
return q;
}//模拟实现strncpy函数
int main()
{
//模拟实现strncpy函数
char str5[10] = "world";
char* p5 = "hasanhj";
char* q5 = My_strncpy(str5, p5, 7);
printf("指定数字符串拷贝成功:%s\n", q5);
return 0;
}
7、模拟实现strcmp函数
#include <stdio.h>
#include <assert.h>
int My_strcmp(char* a, char* b)
{
assert(a);
assert(b);
int cun = 0;
while ((*a != '\0') || (*b != '\0'))
{
if (*a == *b)
{
a++;
b++;
}
else if (*a > *b)
{
cun = 1;
break;
}
else if(*a <*b)
{
cun = -1;
break;
}
}
return cun;
}//模拟实现strcmp函数
int main()
{
//模拟实现strcmp函数
char* str6 = "abcd";
char* p6 = "abcd";
int q6 = My_strcmp(str6, p6);
if (q6 == 0)
{
printf("str6等于p6\n");
}
else if (q6 > 0)
{
printf("str6 > p6\n");
}
else
{
printf("str6 < p6\n");
}
return 0;
}
8、 模拟实现strncmp函数
#include <stdio.h>
#include <assert.h>
int My_strncmp(char* a, char* b, int n)
{
assert(a);
assert(b);
int cun = 0;
while (n)
{
if (*a == *b)
{
a++;
b++;
}
else if (*a > *b)
{
cun = 1;
break;
}
else if (*a < *b)
{
cun = -1;
break;
}
n--;
}
return cun;
}// 模拟实现strncmp函数
int main()
{
//模拟实现strncmp函数
char* str7 = "abcdef";
char* p7 = "abcdej";
int n7 = 6;
int q7 = My_strncmp(str7, p7, n7);
if (q7 == 0)
{
printf("前 %d 位字符比较 str7 等于 p7 \n", n7);
}
else if (q7 > 0)
{
printf("前 %d 位字符比较 str7 大于 p7 \n", n7);
}
else if (q7 < 0)
{
printf("前 %d 位字符比较 str7 小于 p7 \n", n7);
} return 0;
}