C指針練習,模擬string.h庫中一些函數

指針與字符串的函數模擬

C語言沒有string類,C的字符串就是字符數組,並以‘\0’爲字符串結束符。這種字符串被稱爲C風格字符串,由於是底層操作,相關函數在編程中有特別的地位,有很多經典的指針用法。其實,數組就是指針,STL也不過如此,string引入了類,從而加入了方法等,讓其更簡單。C語言是底層操作,操作內存不在話下,指針是經典例子。

字符數組的初始化如下:

char s[] = {'a', 'b', 'c', 'd', '\0'}; //定義s並初始化abcd
char s[] = "abc"; //同上,更簡單

由於數組是靜態的,定義後就不能修改長度了,使用時要注意,s="abcde"是不允許的,要使用strcpy纔可以。

好了,我們來模擬一下strcpy(拷貝)、strlen(測長)、strcmp(字符串比較)和strstr(查找子串)的功能

1、實現strcpy

char * strcpy(char *dest, const char *src)
{
    char *p = dest;
    while (*src != '\0')
    {
        *dest = *src;
        dest++; src++;
    }
    *dest='\0';
    return p;
}

2、實現strlen

size_t strlen(const char * str)
{
    const char *cp =str; //開始指針
    while(*cp++ ) ; //找到結束
    rerutn  (cp- str- 1);
}

3、實現strcmp

int strcmp(const char * src, const char * dst)
{
    //依照字典序
    int ret = 0;
    while (!(ret = *src - *dst) && *dst) //相等且沒有結束
        ++ src, ++ dst; //整體加一
    return ( ret);
}

4、實現strstr

char * strstr (char* buf, char *sub)
{
    if(!*sub)
    	return buf; //特殊情況
    char *bp, *sp;
    while (*buf)
    {
        bp = buf;
        sp = sub;
        do{
            if(!*sp)
                return buf;
        } while (*bp++ == *sp++);
        buf++;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章