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( ); 字符串大小的比较


 typedef   unsigned int  size_t

 size_t   my_strlen  (const char *str)            // strlen()
{
assert(str!=NULL);
int len=;
while(*str != '\0')
{
len++;
str++;
}
return len;
} //不使用中间变量 利用递归;
size_t my_strlen(const char *str)
{
assert(str!=NULL);
if (*str=='\0')
return ;
else
return my_strlen(++str)+;
}

 char* my_strcpy(char *dest,const char *src)             //  strcpy()
{
assert(dest!=NULL&&src!=NULL);
char *dest_tmp=dest; //保护参数
const char *src_tmp=src; //类型匹配
while(*src_tmp!='\0')
{
*dest_tmp++=*src_tmp++;
} *dest_tmp='\0';
return dest;
} void main()
{
char s1[];
char *s2 = "abcde";
my_strcpy(s1, s2);
cout<<"s1 = "<<s1<<endl; //abcde //C++输出方式
}
// 或者第三方接受
void main()
{
char s1[];
char *s2 = "abcde";
char *s3= my_strcpy(s1, s2);
cout<<"s3 = "<<s3<<endl; //abcde
}

 char* my_strcat(char *dest,const char *src)               //  strcat()
{
assert(src!=NULL&&dest!=NULL)
char *dest_tmp=dest; //保护参数
const char *src_tmp=src; //类型匹配 while(*dest_tmp!='\0')
dest_tmp++;
while(*src_tmp!='\0')
*dest_tmp++=*src_tmp++;
*dest_tmp='\0';
return dest;
} void main()
{
char s1[] = "abcdef ";
char s2[] = "ghijk ";
char *str1 = my_strcat(s1, s2);
cout<<"s1 = "<<s1<<endl;
cout<<"str1 = "<<str1<<endl; //abcdefghijk //C++输出方式 }

 /*  strcmp(s1,s2);
s1>s2 : 返回1
s1=s2 : 返回0
s1<s2 : 返回-1
*/ int my_strcmp(const char *str1, const char *str2) //strcmp()
{
assert(str1!=NULL && str2!=NULL);
if(*str1=='\0' && *str2=='\0')
return ;
while(*str1!='\0' && *str2!='\0')
{
if(*str1 > *str2)
return ;
else if(*str1 < *str2)
return -;
str1++;
str2++;
}
if(*str1=='\0' && *str2!='\0')
return -;
if(*str1!='\0' && *str2=='\0')
return ;
return ;
} // 或者
int my_strcmp(const char *str1, const char *str2)
{
assert(str1!=NULL && str2!=NULL);
int result = ;
while(*str1!='\0' || *str2!='\0')
{
if( ( result = *str1-*str2 ) != )
break;
str1++;
str2++;
}
if( result > )
result = ;
else if( result < )
result = -;
return result;
}

注意:

1、判断参数的有效性;

(断言) 所传的参数不能为空。

2、若需要返回指针,使用中间变量;

my_strcpy(); my_strcat();

3、确保空间足够

my_strcpy(); my_strcat();

4、参数保护 保证参数不被函数内部所修改

上一篇:jquery 甘特图开发指南


下一篇:【转载】 JQuery.Gantt(甘特图) 开发指南