首页 > 代码库 > strlen(); strcpy(); strcat(); strcmp() ---笔记
strlen(); strcpy(); strcat(); strcmp() ---笔记
指针小知识点:
int a =10;
int *p=&a;
int *q=p; //p中保存的是a的地址
int *q=p; //将p的值赋给q 作用是让q也指向a
strlen( ); 求字符串的长度
strcpy( ); 复制字符串
strcat( ); 连接字符串
strcmp( ); 字符串大小的比较
1 typedef unsigned int size_t 2 3 size_t my_strlen (const char *str) // strlen() 4 { 5 assert(str!=NULL); 6 int len=0; 7 while(*str != ‘\0‘) 8 { 9 len++; 10 str++; 11 } 12 return len; 13 } 14 15 //不使用中间变量 利用递归; 16 size_t my_strlen(const char *str) 17 { 18 assert(str!=NULL); 19 if (*str==‘\0‘) 20 return 0; 21 else 22 return my_strlen(++str)+1; 23 }
1 char* my_strcpy(char *dest,const char *src) // strcpy() 2 { 3 assert(dest!=NULL&&src!=NULL); 4 char *dest_tmp=dest; //保护参数 5 const char *src_tmp=src; //类型匹配 6 while(*src_tmp!=‘\0‘) 7 { 8 *dest_tmp++=*src_tmp++; 9 } 10 11 *dest_tmp=‘\0‘; 12 return dest; 13 } 14 15 void main() 16 { 17 char s1[20]; 18 char *s2 = "abcde"; 19 my_strcpy(s1, s2); 20 cout<<"s1 = "<<s1<<endl; //abcde //C++输出方式 21 } 22 // 或者第三方接受 23 void main() 24 { 25 char s1[20]; 26 char *s2 = "abcde"; 27 char *s3= my_strcpy(s1, s2); 28 cout<<"s3 = "<<s3<<endl; //abcde 29 }
1 char* my_strcat(char *dest,const char *src) // strcat() 2 { 3 assert(src!=NULL&&dest!=NULL) 4 char *dest_tmp=dest; //保护参数 5 const char *src_tmp=src; //类型匹配 6 7 while(*dest_tmp!=‘\0‘) 8 dest_tmp++; 9 while(*src_tmp!=‘\0‘) 10 *dest_tmp++=*src_tmp++; 11 *dest_tmp=‘\0‘; 12 return dest; 13 } 14 15 void main() 16 { 17 char s1[20] = "abcdef "; 18 char s2[20] = "ghijk "; 19 char *str1 = my_strcat(s1, s2); 20 cout<<"s1 = "<<s1<<endl; 21 cout<<"str1 = "<<str1<<endl; //abcdefghijk //C++输出方式 22 23 }
1 /* strcmp(s1,s2); 2 s1>s2 : 返回1 3 s1=s2 : 返回0 4 s1<s2 : 返回-1 5 */ 6 7 int my_strcmp(const char *str1, const char *str2) //strcmp() 8 { 9 assert(str1!=NULL && str2!=NULL); 10 if(*str1==‘\0‘ && *str2==‘\0‘) 11 return 0; 12 while(*str1!=‘\0‘ && *str2!=‘\0‘) 13 { 14 if(*str1 > *str2) 15 return 1; 16 else if(*str1 < *str2) 17 return -1; 18 str1++; 19 str2++; 20 } 21 if(*str1==‘\0‘ && *str2!=‘\0‘) 22 return -1; 23 if(*str1!=‘\0‘ && *str2==‘\0‘) 24 return 1; 25 return 0; 26 } 27 28 // 或者 29 int my_strcmp(const char *str1, const char *str2) 30 { 31 assert(str1!=NULL && str2!=NULL); 32 int result = 0; 33 while(*str1!=‘\0‘ || *str2!=‘\0‘) 34 { 35 if( ( result = *str1-*str2 ) !=0 ) 36 break; 37 str1++; 38 str2++; 39 } 40 if( result > 0 ) 41 result = 1; 42 else if( result < 0 ) 43 result = -1; 44 return result; 45 }
注意:
1、判断参数的有效性;
(断言) 所传的参数不能为空。
2、若需要返回指针,使用中间变量;
my_strcpy(); my_strcat();
3、确保空间足够
my_strcpy(); my_strcat();
4、参数保护 保证参数不被函数内部所修改
strlen(); strcpy(); strcat(); strcmp() ---笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。