//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);