常用库函数的实现

本文详细介绍了C语言中常用库函数的实现方法,包括字符串比较、拷贝、转换及回文判断等基本操作。

常用库函数的实现:

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





### C语言常用库函数实现方法 #### asctime 函数实现 `asctime` 函数用于将 `struct tm` 类型的时间数据转换成字符串表示形式。此函数返回一个指向静态字符数组的指针,该数组包含了以特定格式表示的时间和日期。 ```c char* my_asctime(const struct tm *timeptr) { static char wday_name[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; static char mon_name[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; static char result[26]; snprintf(result, sizeof(result), "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n", wday_name[timeptr->tm_wday], mon_name[timeptr->tm_mon], timeptr->tm_mday, timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec, 1900 + timeptr->tm_year); return result; }[^2] ``` #### strncmp 函数实现 `strncmp` 函数比较两个字符串前 n 个字节的内容。如果这两个字符串相等,则返回零;如果不相等返回它们第一个不同之处所对应的 ASCII 差值。 ```c int my_strncmp(const char *cs, const char *ct, size_t n) { while (n--) { if (*cs != *ct) return *(unsigned char *) cs - *(unsigned char *) ct; if (*cs == '\0') break; cs++; ct++; } return 0; }[^4] ``` #### pow 函数实现 `pow` 函数用来求解给定底数 x 的 y 次方的结果。这个操作通常通过指数运算来完成,在这里提供了一个简单的迭代版本而非标准库中的高效算法。 ```c double my_pow(double base, int exponent) { double result = 1.0; for(int i=0;i<exponent;++i){ result *=base ; } return result; } // 注意:上述代码仅适用于正整数指数的情况。对于负数或非整数情况需进一步完善。 // 此外,实际应用中应考虑数值范围溢出等问题。[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值