string.h头文件中局部函数的自我编写,简易版

今天我写的是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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值