Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384385
  • 博文数量: 82
  • 博客积分: 1855
  • 博客等级: 上尉
  • 技术积分: 846
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-12 12:28
文章存档

2013年(3)

2012年(8)

2011年(71)

分类: C/C++

2012-02-06 15:46:43

  1. 函数: strcpy
  2. 原型: char * strcpy( char* _Dest, const char *_Source );
  3. 功能: 复制源串_Source到目标串_Dest所指定的位置, 包含NULL结束符. 不能处理源串与目标串重叠的情况. 函数返回_Dest值.
  4. char * Strcpy( char* _Dest, const char *_Source )
  5. {
  6.     assert((_Dest != NULL) && (_Source != NULL));

  7.     while( ( *_Dest++ = *_Source++) != '\0'){
  8.         NULL;
  9.     }

  10.     return _Dest;
  11.         
  12. }
  13. */

  14. char * Strcpy( char* _Dest, const char *_Source )
  15. {
  16.     assert((_Dest != NULL) && (_Source != NULL));
  17.     
  18.     while(*_Source != '\0'){
  19.         *_Dest++ = *_Source++;
  20.     }
  21.     *_Dest = '\0';
  22.     
  23.     return _Dest;
  24.     
  25. }
  26. 函数: strlen的实现代码
  27. 功能: size_t strlen( const char *_Str );
  28. 功能: 获取字符串长度, 字符串结束符NULL不计算在内. 没有返回值指示操作错误.
  29. int Strlen( const char *_Str )
  30. {
  31.     int length = 0;
  32.     
  33.     assert(_Str != NULL);
  34.     
  35.     while(*_Str++ != '\0'){
  36.         length++;
  37.     }
  38.     
  39.     return length;
  40. }
  41. 函数: strcat
  42. 原型: char * strcat( char *_Dest, const char *_Source );
  43. 功能: 将源串_Src字符添加到目标串_Dst后. 本函数不能处理源串与目标串重叠的情况.
  44. char * Strcat( char *_Dest, const char *_Source )
  45. {
  46.     assert((_Dest != NULL) && (_Source != NULL));
  47.     
  48.     char *_Temp = _Dest;
  49.     
  50.     while( *_Temp != '\0')
  51.         _Temp++;
  52.     
  53.     while(*_Source != '\0'){
  54.         *_Temp++ = *_Source++;    
  55.     }
  56.     *_Temp = '\0';
  57.     
  58.     return _Dest;
  59. }

  60. char * Strcat( char *_Dest, const char *_Source )
  61. {
  62.     assert((_Dest != NULL) && (_Source != NULL));

  63.     char *_Temp = _Dest;

  64.     while( *_Temp != '\0'){
  65.         _Temp++;
  66.     }
  67.     
  68.     while((*_Temp++ = *_Source++ ) != '\0');
  69.     
  70.     return _Dest;
  71. }
  72. 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。
  73. 与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'/0'而结束
  74. memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
  75. 返回值说明:返回指向dest的void *指针
  76. 附加说明: 指针src和dest所指的内存区域不可重叠
  77. void *Memcpy(void* _Dest , const void* _Source, int count)
  78. {
  79.     assert((_Dest != NULL) && (_Source != NULL));

  80.     char* str1 = (char*)_Dest;
  81.     char* str2 = (char*)_Source;
  82.     
  83.     while(count--)
  84.     {
  85.         *str1++ = *str2++;    //不对是否存在重叠区域进行判断
  86.     }
  87.     
  88.     return _Dest;
  89. }

  90. void *Memset(void *src, int c, size_t count)
  91. {
  92.     assert( NULL != src);

  93.     char* str = (char*)src;

  94.     while(count--){
  95.         *str++ = (char)c;
  96.     }

  97.     return src;
  98. }


  99. 函数: strstr的实现
  100. 原型: char * strstr( char *_Str, const char *_SubStr );
  101. 功能: 在字符串_Str中查找_SubStr子串. 返回子串_SubStr在_Str中首次出现位置的指针.
  102. 如果没有找到子串_SubStr, 则返回NULL. 如果子串_SubStr为空串, 函数返回_Str值.

  103. #include <stdio.h>
  104. #include <assert.h>
  105. #include <string.h>
  106. char * Strstr( char *_Str, const char *_SubStr )
  107. {
  108.     assert( _Str != NULL);
  109.     
  110.     if(_SubStr == NULL)
  111.         return _Str;

  112.     int i = 0;
  113.     int j = 0;
  114.     int flag = 1;
  115.     int str1_len = strlen(_Str);
  116.     int str2_len = strlen(_SubStr);

  117.     while( (i < str1_len) && (j < str2_len))
  118.     {
  119.         if(_Str[i] == _SubStr[j]){
  120.             i++;
  121.             j++;
  122.             flag = 1;
  123.         }
  124.         else{
  125.             j = 0;
  126.             i++;
  127.             flag = 0;
  128.         }
  129.     }
  130.     
  131.     if(flag == 0){
  132.         return NULL;
  133.     }
  134.     else if(flag == 1){
  135.         return (_Str + i - j);
  136.     }
  137. }

  138. int main()
  139. {
  140.     char str1[] = "abcdef";
  141.     char str2[] = "ccde";
  142.     printf("%s\n", Strstr(str1, str2) );
  143.     return 0;
  144. }
  145. 函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
  146. 返回值说明:返回指向dest的void *指针
  147. void *Memmove(void *dest, const void *src, size_t count)
  148. {
  149.     assert( (dest!=NULL)&&(src!=NULL) );

  150.     char *tmp_dest=(char*)dest;
  151.     char *tmp_src=(char*)src;
  152.     
  153.     if( (tmp_dest + count < tmp_src) || (tmp_src + count < tmp_dest) )
  154.     {// 如果没有重叠区域
  155.         while(count--)
  156.             *tmp_dest++=*tmp_src++;
  157.     }
  158.     else
  159.     {// 如果有重叠区域
  160.         tmp_dest+=count-1;
  161.         tmp_src+=count-1;
  162.         while(count--)
  163.             *tmp_dest--=*tmp_src--;
  164.     }
  165.     return dest;
  166. }
阅读(2851) | 评论(0) | 转发(0) |
0

上一篇:Linux系统调用列表

下一篇:H264简单描述

给主人留下些什么吧!~~