今天我写的是strcpy,strncpy,strcat,strncat,strcmp,strncmp这六个函数的自我编写,没有考虑多余情况,
自我感觉还行,就是最后为了方便检查去,却没有方法对字符串重置,硬生生定义了十几个数组。
有点尴尬之外,感觉还是不错的。
/*
* 2017年7月17日15:31:42* 实现不调用string.h的头文件下,写几个函数使得主函数可以使用string.h中局部的命令。
*/
#include<stdio.h>
//#include<string.h>
void strcat1(char str1[],char str2[]) //实现strcat
{
char *p1 = str1;
char *p2 = str2;
while (*p1)
p1++;
while (*p2)
{
*(p1++) = *(p2++);
}
*p1 = *p2;
}
void strncat1(char str1[],char str2[],int n) //实现strncat
{
char *p1 = str1;
char *p2 = str2;
while (*p1)
p1++;
while (p2 < str2+n)
{
*(p1++) = *(p2++);
}
*p1 = '\0';
}
void strcpy1(char str1[],char str2[]) //实现strcpy
{
char *p1 = str1;
char *p2 = str2;
while (*p2 )
{
*(p1++) = *(p2++);
}
*p1 = '\0';
}
void strncpy1(char str1[],char str2[],int n) //实现strncpy
{
char *p1 = str1;
char *p2 = str2;
while (p2 < str2+n)
{
*(p1++) = *(p2++);
}
}
int strcmp1(char str1[],char str2[]) //实现strcmp
{
char *p1 = str1;
char *p2 = str2;
int len1 = sizeof(str1)/sizeof(str1[0]);
int len2 = sizeof(str2)/sizeof(str2[0]);
if (len1==len2)
{
while(*p1)
{
if (*p1==*p2)
{
p1++;
p2++;
}
else break;
}
if (*p1=='\0')
return 0;
else return 1;
}
else return 1;
}
int strncmp1(char str1[],char str2[],int n) //实现strncmp
{
char *p1 = str1;
char *p2 = str2;
while(p1<str1+n)
{
if (*p1==*p2)
{
p1++;
p2++;
}
else break;
}
if (p1==str1+n)
return 0;
else return 1;
}
int main()
{
char str1[100] = "hello ";
char str2[] = "world";
strcat1(str1,str2);
puts(str1);
char str3[100] = "hello ";
char str4[] = "world";
strncat1(str3,str4,2);
puts(str3);
char str5[100] = "hello ";
char str6[] = "world";
strcpy1(str5,str6);
puts(str5);
char str7[100] = "hello ";
char str8[] = "world";
strncpy1(str7,str8,2);
puts(str7);
char str9[100] = "hello ";
char str10[] = "hello ";
int a = strcmp1(str9,str10);
printf("%d\n",a);
char str11[100] = "hello ";
char str12[] = "hel ";
int b = strncmp1(str11,str12,4);
printf("%d\n",b);
return 0;
}