1. 程式人生 > >自己實現c常見字串函式

自己實現c常見字串函式

1.strlen()

int my_strlen(const char *s)
{
     int len=0;
     if(s==NULL)
     {
        printf("error: null pointer...\n");
        len=-1;
        goto end;
     }
     while(*s++!='\0')
     {
          len++;
     }
  end:
      return len;
}

2.strcpy()

char *my_strcpy(char *dest,const char *src)
{
    char *tmp=dest;
    if(dest==NULL||src==NULL)
    {   
        printf("error: null pointer...\n");
        tmp=NULL;
        goto end;
    }
    while((*dest++ = *src++)!='\0');  //不考慮溢位
end:
    return tmp;
}

3.strcat()

char *my_strcat(char *dest,const char *src)
{
    char *tmp=dest;
    if(dest==NULL||src==NULL)
    {
        printf("error: null pointer...\n");
        tmp=NULL;
        goto end;
    }
    while(*(++dest) != '\0'); //指向目標字串的結尾空字元
    while((*dest++ = *src++) != '\0');
end:
    return tmp;
}

4.strcmp()

char my_strcmp(const char *s1,const char s2)  //其實就是返回第一個不相等的字元的ASCII碼差值
{
    char value=0;
    if(s1==NULL||s2==NULL)
    {
        printf("error: null pointer...\n");
        value=-128;
        goto end;
    }
    while(*s1!='\0' && *s2!='\0' && (value=*s1-*s2)==0) //逐個字元比較,如果沒比較還沒進行到末尾且當前比較的兩個字元相等,則繼續比下去
    {
         s1++;
         s2++;
    }
    if(value==0 && !(*s1==0 && *s2==0))  //考慮s1包含s2或s2包含s1的情況
    {
         value=*s1-*s2;
    }
end:
    return value;
}

5.strchr()

char *my_strchr(const char *src,char ch)
{
    if(src==NULL)
    {
        printf("error: null pointer...\n");
        return NULL;
    }   
    while(*src++ != '\0')
    {
        if(*src==ch)
        {
            return src;
        }
    }
} 

6.strstr()

char *my_strstr(const char *s1,const char *s2)
{
    if(s1==NULL||s2==NULL)
    {
        printf("error: null pointer...\n");
        goto end;
    }
    while(*s1++ != '\0')  //長字串只需一輪遍歷
    {
        char *s1_tmp=s1;
        char *s2_tmp=s2;
        int flag=0;
        while(*s1_tmp++!='\0'&&*s2_tmp++!='\0')
        {
             if(*s1_tmp!=*s2_tmp)  //每小輪比較中,如果對應有字元不相等,則標記
             {
                 flag=1;
             }
        }
        if(flag==0 && *s2_tmp=='\0')  //如果小字串遍歷了且沒有標記,說明找到了相等的子字串
        {
             return s1;
        }
    }
end:
    return NULL;
}

相關推薦

自己實現c常見字串函式

1.strlen() int my_strlen(const char *s) { int len=0; if(s==NULL) { printf("error: null pointer...\n"); len

自己實現C語言atoi函式和執行緒安全版的itoa函式

C語言atoi函式是用來將字串轉化為int型整數的,itoa功能相反。下面是我自己實現的這兩個函式,均為執行緒安全的。程式碼如下: #include <stdio.h> #include <stdlib.h> #include &l

C語言常見字串函式實現

/* 熟練使用C語言中提供的程式碼庫有助於我們在程式設計時極大減少工作量和一些沒有必要的bug。 想成為一個優秀的程式設計師,必須深入理解這些庫。而編寫這些庫就是最好的學習手段。 在平常的積累中,也可以自己擴充套件庫,逐步增強自身能力。 下面實現了一些工作中常用

C 標準字串函式的自實現

文章目錄 說明 strcmp() strcpy() strcat() strlen() strstr() 說明 標準字串:以 ‘\0’ 作為字串的結束符 不使用 C/C++ 庫

C語言字串函式總結:模擬實現常用的字串函式(strlen、strcpy、strcmp........)

總結:模擬實現常用的字串類函式(strlen、strcpy、strcmp……..) 1. strlen 2. strcpy 3. strcat 4. strstr 5. strchr 6. strcmp 7. memcpy 8. m

常見字串函式實現

strlen(),strcpy() int my_strlen(const char *str)//字串長度 { assert(str != NULL); int len = 0; while (*str ++ !=

C++返回字串函式的幾種實現方法

C++返回字串函式有四種方式: 1。使用堆空間,返回申請的堆地址,注意釋放 2。函式引數傳遞指標,返回該指標 3。返回函式內定義的靜態變數(共享) 4。返回全域性變數 1.使用堆空間,返

幾個常見字串函式實現

#ifndef __template_xchar#define __template_xchar template <class xchar>#endif #define __xcharfunc(name)  _t ## name HRESULT wctoac(c

C語言字串函式總結(部分常見字串函式

1.atoi()函式:將字串轉換成整數 標頭檔案:#include < stdlib.h > 定義函式:int atoi(const char *nptr); 函式說明:atoi()

常見字串函式實現過程

一、strlen()函式 求字串長度,不包括 ‘\0’ unsigned int mystrlen( char *s ) { unsigned int len=0; while(*s != '\0') { s++;

C++常見函式

C++常用庫函式   1、常用數學函式     標頭檔案 #include <math> 或者 #include <math.h>   函式原型

python 自己實現列表的sort函式,支援逆序,可以排序任意型別的資料。 實現列表的排序,要求支援逆序和指定標準(key)

def paixv(lt,reverse = None): for i in range(len(lt) - 1): for j in range(i+1,len(lt)): if reverse : if

vector向量容器的過載實現及其常見成員函式

vector的過載實現以及常見成員方法 文章目錄 vector的過載實現以及常見成員方法 1,vector定義 2,vector過載的實現 3,vector常見的成員方法

C語言字串函式歸納。

首先需要知道在c語言中本身並沒有字串型別,字串通常放在常量字串中或者字元陣列中 1.實現strlen 首先strlen函式的作用是求字串長度的。'\0’是它的結束標誌,strlen函式返回的是在字串中‘\0’前面出現的字元個數,strlen函式的返回值為size_t,是無

C語言——字串函式

C語言——字串函式 宗旨:技術的學習是有限的,分享的精神是無限的。 常用字串操作函式的實現:註釋部分你們注意一下,我沒加/,加了/就看不到註釋了。 ************************************************* *功能:實現字串的拷貝

string.h常見字串函式介紹

strcat: 用來連線字串,函式原型為: char *strcat(char *dest, const char *src); 即strcat( str1, str2 )將str2連線到str1上,並且返回str1的首地址。 str1字串後的結束符被覆蓋掉,在連線

自己實現的簡單Printf函式

注意: 1.*pStr != '\0'  2.sprintf正確使用 3.double不能用float否則會溢位非法訪問 4. *pFormat != '\0' 5.pFormat 不能用pTempFormat 原始碼: #include <stdio.h> #

【經典】C語言字串函式原型

strlen / strcmp / strcat / strcpy / memset / strstr / atoi / itoa //** 程式碼演示 -strlen.c **/ size_t m

C語言字串函式大全

函式名: stpcpy  功  能: 拷貝一個字串到另一個  用  法: char *stpcpy(char *destin, char *source);  程式例: #include <stdio.h>  #include <string.h>

c語言】利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)

模擬實現strlen int my_strlen(const char *p) { assert(p != NULL); char *s = p; while (*p) { p++; } r