C/C++语言字符串处理(重写实现)trcpy、strlen、strcat、strcmp、strlwr、strupr、strrev、strchr、strpbrk、strstr、strtok

/*函数: 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 ( '\0' != ( *_Temp++ = *_Source++ ) );
   return _Dest;

/*函数: strlen的实现代码
功能: size_t strlen( const char *_Str );
功能: 获取字符串长度, 字符串结束符NULL不计算在内.
       没有返回值指示操作错误.*/
size_t strlen( const char *_Str )
{
   assert( NULL != _Str );
   size_t _Size = 0;
   while ( '\0' != *_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 ( '\0' != ( *++_Temp ) );
   while ( '\0' != ( *_Temp++ = *_Source++ ) );
   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 += 'a' - 'A';
      }
   }while( '\0' != ( *_Temp++ ) );
   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 -= 'a' - 'A';
      }
   }while( '\0' != ( *_Temp++ ) );
   return _Str;

/*函数: strrev的实现代码
功能: char * strrev( char *_Str );
功能: 将字符串_Str倒转并输出.*/
char * strrev( char *_Str )
{
   assert( NULL != _Str );
   char *_Str1 = _Str;
   char *_Str2 = _Str;
   char _Temp;
   while ( '\0' != *_Str2 ){
      *_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 ( '\0' == *_Str ){
         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; '\0' != *_Str1; ++_Str1 ){
      for ( _Str2 = _Control; '\0' != *_Str2; ++_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 ( '\0' != *_SubStr ){
         return (char*)NULL;
      }
      return _Str;
   }
   while ( '\0' != *_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指向要分解的字符串,以后调用_Str为NULL.*/

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;
}

你可能感兴趣的:(VC++,VC,C)