//string 系列的库函数的实现: 字符串=字符数组+'\0';
1 char* strcpy1( char *strDest, const char *strSrc);
2 char* strncpy1(char* strdest, const char* strsrc, int n);
3 int strcmp1(const char* str1, const char* str2);
4 int strlen1(const char* str); //还可以使用递归的思想
5 char* strstr1(const char* str1, const char* str2);
6 char *strcat1(char *strDest, const char *strSrc);
7 void *memcpy1(void *pvTo,const void *pvFrom,size_t size); //完成内存的拷贝
========================================================================================
1 char* strcpy1( char *strDest, const char *strSrc);
char* strcpy1(char *strDest, const char *strSrc )
{
assert(strSrc!=NULL&&strDest!=NULL);
char *str=strDest;
//while(str!='\0') while(str!=NULL) 犯得俩神棍一样的错误!!!
while(*strSrc!='\0')
{
*str++=*strSrc++;
}
*str='\0'; //最后加上字符串结束标志
cout<<strDest<<endl;
return strDest;
}
2 char* strncpy1(char* strdest, const char* strsrc, int n)
char* strncpy1(char* strdest, const char* strsrc, int n )
{
assert(strdest!=NULL&&strsrc!=NULL);
char* str=strdest;
int num=0;
while(*strsrc!='\0'&&num<n)
{
*str++=*strsrc++;
num++;
}
if(num==n)
{
*str='\0';
cout<<"拷贝成功了:"<<strdest<<endl;
return strdest;
}
cout<<"拷贝失败!!!"<<endl;
return NULL;
}
3 int strcmp1(const char* str1, const char* str2)
// 否定:比较每一个字符的值得大小---正数返回1,相等返回0,负数返回-1;
int strcmp1( const char* str1, const char* str2 )
{
assert(str1!=NULL&&str2!=NULL);
int res=0;
//while(*s1==*s2){} res=*s1-*s2;
while(!(res=(unsigned char*)*str1-(unsigned char*)*str2)&&(*str2))
{
str1++;
str2++;
}
if(res>0)
{
cout<<1<<endl;
return 1;
}
else if(res<0)
{
cout<<-1<<endl;
return -1;
}
cout<<0<<endl;
return 0;
}
4 int strlen1(const char* str)
int strlen1( const char* str )
{
assert(str!=NULL);
int num=0;
const char *strtmp=str; //char *strtmp=str; 出错
while(*strtmp!='\0')
{
num++;
strtmp++;
}
cout<<"The number is "<<num<<endl;
return num;
}
5 char* strstr1(const char* str1, const char* str2)
char* strstr1( const char* str1, const char* str2 )
{
assert(str1!=NULL&&str2!=NULL);
//const char *p=str1,*p2=str2;
char *p=(char*)str1,*p2=(char*)str2;
char *tmp=NULL; //tmp从第一个匹配的字符开始标志。
while(*p!='\0')
{
if(*p==*p2)
{
tmp=p;
while(*tmp==*p2&&*p2!='\0')
{
tmp++;
p2++;
}
if(*p2=='\0')
{
cout<<"匹配:找到了"<<p<<endl;
return p;
}
}
p++;
}
cout<<"匹配失败!"<<endl;
return NULL;
}
6 char *strcat1(char *strDest, const char *strSrc)
//1 找到strDest的最后位置 2 建立连接关系一一拷贝。
char * strcat1( char *strDest, const char *strSrc )
{
/*assert(strDest!=NULL&&strSrc!=NULL);
int lenDest,lenSrc;
lenDest=strlen(strDest);
lenstrlen(strSrc);
for(int i=0;i<lenSrc;i++)
{
strDest[lenDest+i]=strSrc[i];
}
strDest[lenDest+lenSrc]='\0';
cout<<strDest<<endl;
return strDest;*/
//第二种方法:
assert(strDest!=NULL&&strSrc!=NULL);
char *strP=strDest;
while(*strP!='\0')
{
strP++;
}
//从最后的一个位置 进行复制。
while(*strSrc!='\0')
{
*strP++=*strSrc++;
}
*strP='\0';
cout<<strDest<<endl;
return strDest;
}
7 void *memcpy1(void *pvTo,const void *pvFrom,size_t size); //完成内存的拷贝
注意:编译的时候出现错误!!
// //内存拷贝可以 拷贝任意数据类型的数据---转化为(byte*)
//void * memcpy1( void *pvTo,const void *pvFrom,size_t size )
//{
// assert(pvTo!=NULL&&pvFrom!=NULL);
// byte *memTo=(byte*)pvTo;
// byte *memFrom=(byte*)pvFrom;
//
// while(size>0)
// {
// *memTo++=*memFrom++;
// size--;
// }
//
// return pvTo;
//}
测试代码:
char str1[100],str2[]="nihao haha";
//strcpy1(str1,str2);
strncpy1(str1,str2,8);
/*char *s1="Hello, world!";
char *s2="Hello, World!";
strcmp1(s1,s2);*/
//strlen1(str2); //在函数外面可以是:len=sizeof(str)/sizeof(char);
/*char *s1="Hello, world!";
char *s2="world";
strstr1(s1,s2);*/
char string1[50]="Thanks ,thank you.";
char *s="you are welcome.";
strcat1(string1,s);
转载于:https://blog.51cto.com/5037939/1298602