指針與字符串的函數模擬
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;
}