Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338087
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-07 11:17
个人简介

爱运动,爱看书,爱生活!

文章分类

全部博文(73)

文章存档

2014年(7)

2013年(66)

分类: C/C++

2013-08-17 19:23:57

strcpy:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <stdlib.h>

  4. char *scp(char *dst,const char *src)
  5. {
  6.     assert(dst!=NULL && src!=NULL);
  7.     char *address=dst;
  8.     while((*dst++=*src++)!='\0' )//这一句执行以后*dst指向了'\0'的下一个位置
  9.     NULL;
  10.     return address;
  11. }
  12. int main()
  13. {
  14.     char *s=(char*)malloc(15*sizeof(char));
  15.     scp(s,"i'm a teacher");
  16.     printf("%s\n",s);
  17.     free(s);
  18.     s=NULL;//防止释放后s变为野指针
  19.     return 0;
  20. }
strcat:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>

  4. /*
  5.     while(*p) p++;最后p指向\0
  6.     while(*p++!='\0')
  7.     原来*++的优先级是一样的,当优先级一样的时候,
  8.     程序按自左至右的顺序执行。所以当*p = 'c' 或者*p = '\0'时,
  9.     p仍然要往下移一位,即p指向满足条件后的下一个字节。
  10. */
  11. char *myStrcat(char *s1,const char *s2)
  12. {
  13.     assert(s1!=NULL && s2!=NULL);
  14.     char *address=s1;
  15.     while(*s1++);
  16.     s1--;
  17.     while(*s1++=*s2++);    
  18.     return address;
  19. }
  20. int main()
  21. {
  22.     char *str1="ygf";
  23.     char *str2=" I love you";
  24.     char *dst=malloc(40);
  25.     myStrcat(myStrcat(dst,str1),str2);
  26.     printf("%s\n",dst);
  27.     free(dst);
  28.     dst=NULL;//释放后让这个指针指向NULL
  29.     return 0;
  30. }
strlen:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <assert.h>

  3. int strlen(const char *s)
  4. {
  5.     assert(s!=NULL);
  6.     int len=0;
  7.     while(*s++!='\0')
  8.     len++;
  9.     return len;    
  10. }
  11. int main()
  12. {
  13.     char *str="YinGuangFei";
  14.     printf("%d\n",strlen(str));
  15. }
不用中间变量实现strlen

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //不用中间变量实现mystrlen
  4. int mystrlen(const char *s)
  5. {
  6.     /*
  7.     if('\0'==*s)
  8.         return 0;
  9.     else
  10.     return mystrlen(s+1)+1;
  11.     */
  12.     //或者
  13.     return *s?mystrlen(s+1)+1:0;
  14.     
  15. }
  16. int main()
  17. {
  18.     char *str="ygf";
  19.     printf("strlen(str)=%d\n",mystrlen(str));
  20.     
  21. }


strcmp:

点击(此处)折叠或打开

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <assert.h>

  4. int mystrcmp(const char *s1,const char *s2)
  5. {
  6.     assert(s1!=NULL && s2!=NULL);
  7.     int rec=0;
  8.     while(!(rec=*(unsigned char*)s1-*(unsigned char *)s2) && *s1)
  9.     {
  10.         s1++;
  11.         s2++;
  12.     }
  13.     if (rec< 0)
  14.     {
  15.         return -1;
  16.     }
  17.     else if (rec > 0)
  18.     {
  19.         return 1;
  20.     }
  21.     return 0;
  22. }





阅读(1243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~