1.编写一个函数实现strlen以及strcpy函数.
strcpy函数.
后面的字符串拷贝到一个字符数组中,要求拷贝好的字符串在字符数组的首
地址,并且只拷贝到'\0'的位置.原型是
char* my_strcpy(char* dest[],const char* src);
1#include <stdio.h> 2 #include <assert.h> 3 char* my_strcpy(char *dest,const char* src) 4 { 5 assert(dest != NULL && src != NULL); 6 char* p = dest; 7 while(*src != '\0') 8 { 9 *p++ = *src++; 10 }12 return dest; 13 } 14 int my_strlen(const char* str) 15 { 16 int res = 0; 17 if(NULL == str) 18 return -1; 19 else 20 while(*str++ != '\0') //注意这里的'\0'和0是相同的. 21 res++; 22 return res; 23 }
这两个函数的实现主要是判断空指针,其他的注意细节就是strcpy不要改变第一个参数的指向,还有就是返回字符串的
首地址以实现级联式应用.
下面写一个简化版本的更好.
char* other_strcpy(char* dest,const char* src) { assert(dest != NULL && src != NULL); char *p = dest; while((*p++ = *src++) != '\0') NULL; return dest; }
2.实现strcat和strcmp函数.
原型是:char* my_strcat(char* dest,const char* src);
int my_strcmp(const char* s1,const char* s2);
1 #include <stdio.h> 2 #include <assert.h> 3 int my_strcmp(const char* s1,const char* s2) 4 { 5 assert(s1 != NULL && s2 != NULL); 6 for(;*s1 == *s2;s1++,s2++); 7 if(*s1 == '\0' && *s2 == '\0') 8 return 0; 9 return ((unsigned char)*s1 < (unsigned char)*s2 ? -1: 1); 10 } 3 char* my_strcat(char* s1,const char* s2) 4 { 5 assert(s1 != NULL && s2 != NULL); 6 char* dest = s1; 7 while(*dest != '\0') 8 dest++; 9 while(*dest++ = *s2++); 10 return s1; 11 }