常用庫函數的實現

常用庫函數的實現:

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章