指针小知识点:

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、参数保护 保证参数不被函数内部所修改

strlen(); strcpy(); strcat(); strcmp() ---笔记的更多相关文章

  1. 实现strlen,strcpy,strcat,strcmp同功能的函数stringLength,stringCopy,stringCatch,stringCompare

    #import <Foundation/Foundation.h> /* 求字符串长度 */ int stringLength(char arr[]); /* 复制字符串 将arr1 复制 ...

  2. 写出完整版的strcpy函数及其他如:strcat,strcmp,strstr的函数实现

    (---牛客网中刷题---)写出完整版的strcpy函数 如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 2分 1 2 3 4 void strcpy( char *st ...

  3. 实现字符串函数,strlen(),strcpy(),strcmp(),strcat()

    实现字符串函数,strlen(),strcpy(),strcmp(),strcat() #include<stdio.h> #include<stdlib.h> int my_ ...

  4. 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)

    不使用库函数.自己编写的(strlen.strcpy.strcmp.strcat.memcmp.memcpy.memmove) //求字符串长度的函数 int my_strlen(const char ...

  5. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  6. C 实现strcmp,strcpy,strcat函数

    基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序猿的基础,一定要重视. char* strcat ( char * dst , const char * src ) { ...

  7. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  8. 字符串处理strcpy strcat函数的用法

    C语言函数字符串处理strcpy strcat函数的用法: 1)strcat是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串 ...

  9. 逆向 string.h 函数库 memset、strcpy、strcmp 函数

    memset 函数 函数原型:void *memset(void *str, int c, size_t n) 主要功能:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符 ...

随机推荐

  1. 横向滑动的GridView

    思路: GridView行数设置为一行,外面套一个HorizontalScrollView,代码中设置GridView宽度 xml代码 <HorizontalScrollView android ...

  2. java 文件压缩和解压(ZipInputStream, ZipOutputStream)

    最近在看java se 的IO 部分 , 看到 java 的文件的压缩和解压比较有意思,主要用到了两个IO流-ZipInputStream, ZipOutputStream,不仅可以对文件进行压缩,还 ...

  3. 微软云创益大赛获奖团队风采:做一个中国特色的.Net源代码社区

    为了强化云技术,落地云应用,彰显云价值,微软(中国)携手中国计算机报举办了“微软Cloud OS第二届云创益大赛”.本届大赛历时111天,共吸引了6647位个人组选手回答了70,078道题,59支参赛 ...

  4. ASP.NET 缓存技术分析

    缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大 ...

  5. [蟒蛇菜谱]Python函数参数传递最佳实践

    将函数作为参数传递,同时将该函数需要的参数一起传递.可参考threading.Timer的处理方式: class threading.Timer(interval, function, args=[] ...

  6. sed用法

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  7. SQLHelper

    今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...

  8. spring 3.0 应用springmvc 构造RESTful URL 详细讲解

    在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...

  9. No.2 CAS之SPNEGO+LDAP认证配置

    1.概述 本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录. 然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆. 参考文档 ...

  10. 解决ThinkPHP关闭调试模式时报错的问题汇总

    解决ThinkPHP关闭调试模式时报错的问题汇总 案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 "页面调试错误,无法找开页 ...