指针小知识点:

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. 字符串操作函数&lt;string.h&gt;相关函数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. Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解

      strlen(返回字符串长度) 表头文件 #include <string.h> 定义函数 size_t strlen(const char *s); 函数说明 strlen()用来计 ...

随机推荐

  1. jQuery之empty、remove、detach

    三者都有把元素移除的作用,但细微的差别,造就了它们的使命不同. 最权威的解释当然是jQuery_API咯,下面是API中关于他三儿的部分截取. 一.empty: This method removes ...

  2. 【Android测试】【随笔】性能采集工具——小松鼠诞生记

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4945066.html 起因 去年刚加入TX的时候,我便接手 ...

  3. js 键盘移动div、img对象

    js 键盘移动div.img对象 <html> <script type="text/javascript"> var EXtype="" ...

  4. webuploader在同一个页面支持多个按钮实例

    之前在时候用到webuploader ,起初是支持单实例,后来要求支持多实例. webuploder API网址,如果不懂我说的可以去查看http://fex.baidu.com/webuploade ...

  5. Retina

    走向Retina Web RETINA时代的前端优化 <!DOCTYPE html> <html> <head> <meta charset="ut ...

  6. tomcat配置多实例

    CATALINA_HOME环境变量不必配置,因为在startup.sh脚本里会指定CATALINA_HOME的位置.     配置tomcat多实例 首先是理解下原理:CATALINA_HOME指向安 ...

  7. MapReduce浅析

    很早之前就用过Hadoop,但对MapReduce中的具体数据流向过程一直不甚明了,用Python Streamming的方式写了几个MapReduce,对这个过程有了一定的认识. 首先我们知道,Ma ...

  8. 在WINDOWS服务器下设置MARIADB自动备份的方法

    WINDOWS服务器下自动备份有三个步骤 1.首先新建一个.BAT文件里面输入 @echo offset "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" ...

  9. Linux 重装系统 连接不上的问题

    https://blog.csdn.net/liqi_q/article/details/78465949 ssh-keygen -R ip

  10. s6-7 TCP 传输策略

    TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...