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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章