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

2013年(3)

2012年(8)

2011年(71)

分类: C/C++

2011-10-13 11:14:51

本文仅供参考,如有错误请纠正。谢谢!

/*

函数: strcpy

原型: char * strcpy( char* _Dest, const char *_Source );

功能: 复制源串_Source到目标串_Dest所指定的位置,

        包含NULL结束符. 不能处理源串与目标串重叠的情况.

        函数返回_Dest.

*/

char * strcpy( char *_Dest, const char *_Source )

{

   assert( ( NULL != _Dest ) && ( NULL != _Source ) );

 

   char *_Temp = _Dest;

 

   while ( ( *_Temp++ = *_Source++ ) != '/0' );

 

   return _Dest;

}

 

/*

函数: strlen的实现代码

功能: size_t strlen( const char *_Str );

功能: 获取字符串长度, 字符串结束符NULL不计算在内.

       没有返回值指示操作错误.

*/

size_t strlen( const char *_Str )

{

   assert( _Str != NULL );

 

   size_t _Size = 0;

 

   while ( *_Str++ )

   {

      _Size++;

   }

 

   return _Size;

}

 

/*

函数: strcat

原型: char * strcat( char *_Dest, const char *_Source );

功能: 将源串_Src字符添加到目标串_Dst.

        本函数不能处理源串与目标串重叠的情况.

*/

char * strcat( char *_Dest, const char *_Source )

{

   assert( ( NULL != _Dest ) && ( NULL != _Source ) );

 

   char *_Temp = _Dest;

 

   while ( ( *++_Temp ) != NULL );

 

   while ( ( *_Temp++ = *_Source++ ) != NULL );

  

   return _Dest;

}

 

/*

函数: strcmp

原型: int strcmp( const char *_Str1, const char *_Str2 );

功能: 比较字符串_Str1_Str2大小.

       返回值< 0, 表示_Str1小于_Str2;

       返回值为0, 表示_Str1等于_Str2;

       返回值> 0, 表示_Str1大于_Str2.

*/

int strcmp( const char *_Str1, const char *_Str2 )

{

   assert( ( NULL != _Str1 ) && ( NULL != _Str2 ) );

 

   for ( ; *_Str1 == *_Str2; _Str1++, _Str2++ )

   {

      if ( ( '/0' == *_Str1 ) || ( '/0' == *_Str2 ) )

      {

         if ( *_Str1 == *_Str2 )

         {

            return 0;

         }

         else

         {

            break;

         }

 

      }

 

   }

 

   return ( ( *_Str1 > *_Str2 ) ? 1 : -1 );

}

 

/*

函数: strlwr的实现代码

功能: char * strlwr( char *_Str );

功能: 将字符串_Str的大写转换成小写并输出.

*/

char * strlwr( char *_Str )

{

   assert( NULL != _Str );

   char *_Temp = _Str;

   do

   {

      if ( ( *_Temp >= 'A' ) && ( *_Temp <= 'Z' ) )

      {

         *_Temp += 32;

      }

   }while( ( *_Temp++ ) != '/0' );

 

   return _Str;

}

 

/*

函数: strupr的实现代码

功能: char * strupr( char *_Str );

功能: 将字符串_Str的小写转换成大写并输出.

*/

char * strupr( char *_Str )

{

   assert(  NULL != _Str);

   char *_Temp = _Str;

   do

   {

      if ( ( *_Temp >= 'a' ) && ( *_Temp <= 'z' ) )

      {

         *_Temp -= 32;

      }

   }while( ( *_Temp++ ) != '/0' );

 

   return _Str;

}

 

/*

函数: strrev的实现代码

功能: char * strrev( char *_Str );

功能: 将字符串_Str倒转并输出.

*/

char * strrev( char *_Str )

{

   assert( NULL != _Str );

   char *_Str1 = _Str;

   char *_Str2 = _Str;

   char _Temp;

   while ( *_Str2 != '/0' )

   {

      *_Str2++;

   }

 

   if( _Str1 != _Str2 )

   {

      _Str2--;

   }

 

   while ( _Str1 < _Str2 )

   {

      _Temp = *_Str1;

      *_Str1 = *_Str2;

      *_Str2 = _Temp;

      *_Str1++;

      *_Str2--;

   }

 

   return _Str;

}

 

/*

函数: strchr的实现代码

功能: const char * strchr( const char *_Str, int _Val );

能: 函数返回一个指向Str_Val首次出现的位置,当没有在_Str中找_Val到返回NULL

*/

const char * strchr( const char *_Str, int _Val )

{

   assert( NULL != _Str );

   for ( ; *_Str != (char)_Val; ++_Str )

   {

      if ( *_Str == '/0' )

      {

         return (const char *)NULL;

      }

 

   }

  

   return _Str;

}

 

/*

函数: strpbrk的实现代码

功能: char * strpbrk( char *_Str, const char *_Control );

功能: 函数返回一个指针,它指向字符串_Control中任意字符在字符串_Str首次出现的位置,如果不存在返回NULL.

*/

char * strpbrk( char *_Str, const char *_Control )

{

   assert( ( NULL != _Str ) && ( NULL != _Control ) );

   char *_Str1;

   const char *_Str2;

 

   for ( _Str1 = _Str; *_Str1 != '/0'; ++_Str1 )

   {

      for ( _Str2 = _Control; *_Str2 != '/0'; ++_Str2 )

      {

         if ( *_Str1 == *_Str2 )

         {

            return _Str1;

         }

 

      }

 

   }

 

   return (char*)NULL;

}

 

/*

函数: strstr的实现

原型: char * strstr( char *_Str, const char *_SubStr );

功能: 在字符串_Str中查找_SubStr子串.

       返回子串_SubStr_Str中首次出现位置的指针.

        如果没有找到子串_SubStr,

        则返回NULL. 如果子串_SubStr为空串, 函数

        返回_Str.

*/

char * strstr( char *_Str, const char *_SubStr )

{

   assert( ( NULL != _Str ) && ( NULL != _SubStr ) );

 

   unsigned int i = 0;

   if ( 0 == *_Str )

   {

      if ( *_SubStr )

      {

         return (char*)NULL;

      }

 

      return _Str;

   }

 

   while ( *_Str )

   {

      i = 0;

      while (1)

      {

         if ( 0 == _SubStr[i] )

         {

            return _Str;

         }

 

         if ( _SubStr[i] != _Str[i] )

         {

            break;

         }

 

         i++;

      }

 

      _Str++;

   }

  

   return (char*)NULL;

}

 

/*

函数: strtok的实现代码

功能: char * strtok( char *_Str, const char *_Delim );

功能: 查找由_Delim指定分界符对_Str进行分解.首次调用_str指向要分解的字符串,以后调用_StrNULL.

*/

char * strtok( char *_Str, const char *_Delim )

{

   static char *_Begin;

   if ( NULL != _Str )

   {

      _Begin = strstr( _Str, _Delim );

      while ( _Begin == _Str )

      {

         _Str += strlen( _Delim );

         _Begin = strstr( _Str, _Delim );

      }

 

   }

   else

   {

      _Str = _Begin;

      if ( NULL == _Str )

      {

         return NULL;

      }

 

      _Begin = strstr( _Str, _Delim );

      while ( _Begin == _Str )

      {

         _Str += strlen( _Delim );

         _Begin = strstr( _Str, _Delim );

      }

 

   }

 

   if ( NULL != _Begin )

   {

      memset( _Begin, 0, strlen( _Delim ) );

      _Begin += strlen( _Delim );

   }

   else if ( 0 == *_Str )

   {

      return NULL;

   }

 

   return _Str;

}

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