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=0;
while(*str != '\0')
{
len++;
str++;
}
return len;
}

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

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[20];
char *s2 = "abcde";
my_strcpy(s1, s2);
cout<<"s1 = "<<s1<<endl; //abcde //C++输出方式
}
// 或者第三方接受
void main()
{
char s1[20];
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[20] = "abcdef ";
char s2[20] = "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 0;
while(*str1!='\0' && *str2!='\0')
{
if(*str1 > *str2)
return 1;
else if(*str1 < *str2)
return -1;
str1++;
str2++;
}
if(*str1=='\0' && *str2!='\0')
return -1;
if(*str1!='\0' && *str2=='\0')
return 1;
return 0;
}

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

注意:

1、判断参数的有效性;

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

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

my_strcpy(); my_strcat();

3、确保空间足够

my_strcpy(); my_strcat();

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

永不止步步 发表于12-28 09:59 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号