字符串操作函数原型实现

15 篇文章 0 订阅
5 篇文章 0 订阅
//将两个char类型连接:
char * __cdecl strcat(char * dst, const char * src)
{
         char * cp = dst;

         while( *cp )
                 cp++; 
         while( *cp++ = *src++ ) ;

         return( dst );
}

 
//C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间: 
char * __cdecl strcpy(char * dst, const char * src)
{
         char * cp = dst;
         while( *cp++ = *src++ );          
	 return( dst );
}


//查找字符串s中首次出现字符c的位置 
char * __cdecl strchr(const char * string, int ch)
{
         while (*string && *string != (char)ch)
                 string++;
         if (*string == (char)ch)
                 return((char *)string);
         return(NULL);
}

/*C/C++函数,比较两个字符串,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数. */
int __cdecl strcmp(const char * src,const char * dst)
{
         int ret = 0 ;

         while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                 ++src, ++dst;

         if ( ret < 0 )
                 ret = -1 ;
         else if ( ret > 0 )
                 ret = 1 ;

         return( ret );
}

//求字符串长度 
size_t __cdecl strnlen(const char *str, size_t maxsize)
{
     size_t n;
     for (n = 0; n < maxsize && *str; n++, str++) ;
     
     return n;
}

//求字符串长度
size_t __cdecl strlen(const char * str)
{
         const char *eos = str;
         while( *eos++ ) ;
         return( eos - str - 1 );
}

//拷贝安全函数 
errno_t __cdecl strcpy_s(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC)
{
     _CHAR *p;
     size_t available;

     _VALIDATE_STRING(_DEST, _SIZE);
     _VALIDATE_POINTER_RESET_STRING(_SRC, _DEST, _SIZE);

     p = _DEST;
     available = _SIZE;
     while ((*p++ = *_SRC++) != 0 && --available > 0){}

     if (available == 0)
     {
         _RESET_STRING(_DEST, _SIZE);
         _RETURN_BUFFER_TOO_SMALL(_DEST, _SIZE);
     }
     _FILL_STRING(_DEST, _SIZE, _SIZE - available + 1);
     _RETURN_NO_ERROR;
}

char * __cdecl strncpy(char * dest, const char * source, size_t count)
{
         char *start = dest;
         while (count && (*dest++ = *source++))    // copy str 
                 count--;
         if (count)  
	     while (--count)  
                 *dest++ = '\0';

         return(start);
 }


/*strstr(str1,str2)函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL. */
char * __cdecl strstr(const char * str1, const char * str2)
{
         char *cp = (char *) str1;
         char *s1, *s2;
         if ( !*str2 )
             return((char *)str1);

         while (*cp)
         {
                 s1 = cp;
                 s2 = (char *) str2;

                 while (*s1 && *s2 && !(*s1-*s2)) s1++, s2++;

                 if (!*s2)
                         return(cp);

                 cp++;
         }
         return(NULL);
}

//strstr(str1,str2)函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中最后一次次出现的地址(也就是从右往左第一次出现的位置);否则,返回NULL.
char * __cdecl strrchr(const char * string, int ch)
{
         char *start = (char *)string;
         while (*string++) ; /* find end of string */       
         while (--string != start && *string != (char)ch) ;
         if (*string == (char)ch)  return( (char *)string );

         return(NULL);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值