常用库函数的实现

常用库函数的实现:

1.      strcmp() 实现

不使用库函数,编写int strcmp(char *source, char * dest)若相等返回0,不等返回-1.

int Mystrcmp_simple(char * src, char*dest)
{
    assert(src!=NULL && dest!=NULL);
    while(*(src++) == *(dest++))
    {
        if((*src == '\0') && (*dest == '\0'))
            return 0;
        }
    return -1;
}

编写intstrcmp(char *source, char * dest),若相等返回0,大于返回1,小于返回-1.

int Mystrcmp(const char *src, const char* dest)
{
    assert((dest!=NULL)&&(src!=NULL));
    while((*src == *dest)&&*src!='\0'&&*dest!='\0'))
    {
         src++;
         dest++;
         }
       	 if(*src == *dest )
            return 0;
         else if(*src>*dest)
                return 1;
         else
                return -1;
           
       
    }



2.      字符串拷贝函数int  strcpy(char *dest, char*src),成功返回copy的字节数,失败返回-1.

int Mystrcpy(char*src, char *dest)
{
    assert(src!=NULL && dest!=NULL);
    int len = strlen(src);
    int i =0;
    while((*(dest++) = *(src++)) != '\0')
    {
        i++;
        }
    if(i == len)
        return i;
    else
        return -1;
}

strncpy函数

int Mystrncpy(char *src, char *dest, int n)
{
    assert(src!=NULL && dest!=NULL);
    int lenS = strlen(src);
    //int lenD = strlen(dest);
    if(lenS<n)
    {
        perror("parameter error");
        return -1;
    }
    int i =0;
    while((*(dest++) = *(src++))!='\0')
        {
            i++;
            if(i == n)
            {
                *dest = '\0'; // 此处一定是要有的
                return i;
            }
            }
       return -1;

}

3.      字符串转换为int型数据,或者int型数据转换为字符串

/*atoi转换函数*/

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>    // 定义了INT_MIN 和 INT_MAX两个宏
int Myatoi(const char *src)
{
    assert(src != NULL);
    const char *temp = src;
    int num = 0;
    if(*temp == '-')// 确定字符串的首位是否是‘-’
    {
        temp++;
        while('\0' != *temp)
        {
        num = num*10 - (*temp - '0');
        temp++;
        if(num> 0) // 判断数据是否溢出
        {
            printf("date overflow.");
            return -1;
            }
        }
        return num;
        }
    else{
    while('\0' != *temp)
    {
        num = num*10 + (*temp - '0');
        temp++;
        if(num < 0) // 判断数据是否溢出
        {
            printf("data overflow.");
            return -1;
            }
        }
    return num;
    }
}

itoa函数

#define MAXSIZE 11 // int的最大取值为4294967296,因此定义MAXSIZE 为11
char* Myitoa(intsrc, char *dest, int radix)// radix是将int数据转换为radix进制的字符串
{
      assert(NULL != dest);
      int i=0,j=0;
      intsign = src;
      chartemp[MAXSIZE];
             if(src < 0)
             {
            src = -src;
         }
             while(src)
             {
            temp[i] = src%radix + '0';
            i++;
                  src = src/radix;
         }
      if(sign< 0)
         {temp[i] = '-';
         i++;
         temp[i] = '\0';
      }
             temp[i] = '\0';
             cout<<temp<<endl;
               i--;
             while(i>=0)
             {
       dest[j++] = temp[i--];
       }
             dest[j] = '\0';
             return dest;
    }


4.判断字符串是否是回文使用指针实现

/*判断一个字符串是否是回文*/
bool isPalidrome(char *input)
{
    assert(NULL != input);
    char *begin = input;
    char *end = begin + strlen(input) -1;
    while(end>begin)
    {
        if(*(begin++)!=*(end--))
            return false;

        }
    return true;
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值