07庫函式編寫

2021-07-03 05:37:05 字數 2968 閱讀 9028

1:字串查詢

給定乙個字串a,要求在a中查詢乙個子串b。如a="abcdf",要你在a中查詢子串b=「cd」。

初步**如下:

int  strstr(char *string, char *substring)     

if (j == lensub)    

return i + 1;    

}    

return -1;    

}  針對這個strstr的函式,我覺得有點小問題。我查了一下c標準庫的原始碼,它給的宣告是這樣的,兩個引數都有const:

char *strstr(const char *haystack_start, const char *needle_start)

而且標準庫中沒有呼叫strlen函式,因為假如你是標準庫的設計者,strlen()函式還沒設計出來,你怎麼去計算兩個字串的長度?是不是只能通過指標移動來實現,我覺得這些都是微軟要考察的地方。

此外:還有int lenstr=strlen(string);這是不安全的?strlen函式的返回型別是size_t型,也就是無符號整型,假如我的陣列長度很長(假如是用堆分配的,可以很大很大),長過2的31次方減1的話,會發生一處,你這lenstr就會變成負值了,所以用size_t型別最保險。

2:字元查詢

在乙個字串中找到第乙個只出現一次的字元。如輸入abaccdeff,則輸出b。**如下:

char  firstnotrepeatchar(char  * pstring)    

;      //存入陣列,並初始化為0    

char  * phashkey = pstring;    

while(*(phashkey) != '/0')    

hashtable[*(phashkey++)]++;  

while(*pstring != '/0')    

return '\0';  //沒有找到滿足條件的字元,退出    

3:字串拷貝

題目描述:要求實現庫函式strcpy,

原型宣告:extern  char*strcpy(char *dest,char *src);

功能:把src所指由null結束的字串複製到dest所指的陣列中。  

說明:src

和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。

分析:如果編寫乙個標準strcpy函式的總分值為10,下面給出幾個不同得分的答案:

//2分 

void  strcpy( char *strdest, char *strsrc) 

//4分 

void  strcpy( char *strdest, const char *strsrc )  

//7分 

void  strcpy(char *strdest, const char *strsrc)  

//10分 

//為了實現鏈式操作,將目的位址返回,加3分!

char * strcpy( char *strdest, const char *strsrc )  

4:部分庫函式的實現

char  *strncpy(char  *strdes, const char *strsrc,  unsigned  int  count)     

//查詢字串s中首次出現字元c的位置  

char  *strchr(const  char *str, int  c)  

int  strcmp(const char *s, const char *t)  

return (*s -*t); 

}  

int  strncmp(const char *s, constchar *t, unsigned int count)  

return (*s - *t);   }

char  *strcat(char *strdes, const char *strsrc)  

char   *strncat(char *strdes, const char *strsrc,unsigned int count)  

int  strlen(const char *str)  

//將字串拷貝到新的位置    

char  *strdup_(char *strsrc)    

return null;    

}    

char  *strstr(const char *strsrc, const char *str)

return null;  

}  

/*  功能:依次檢驗字元

串s1中的字元,當被檢驗字元在字串s2中也包含時,則停止檢驗,並返回該字元位置,空字元null不包括在內。*/

char  *strpbrk(const char *strsrc, const char*str)     

++ strsrc;  

}  

return null;  

}  

void  *memcpy(void *dest, const void *src, unsigned int count)  

return address;  

}  

5:總結

1:判斷指標引數是否為

null

2:如果引數唯讀不寫,則需要新增

const

3:函式中盡量不要呼叫其他庫函式

4:申請記憶體後,需要判斷是否申請成功

5:如果是記憶體函式,則注意指標型別

07庫函式編寫

1 字串查詢 給定乙個字串a,要求在a中查詢乙個子串b。如a abcdf 要你在a中查詢子串b cd 初步 如下 int strstr char string,char substring if j lensub return i 1 return 1 針對這個strstr的函式,我覺得有點小問題。...

編寫atoi庫函式

看到很多面試書和部落格都提到編寫atoi函式,在很多面試中面試官都會要求應聘者當場寫出atoi函式的實現 但基本很少人能寫的完全正確,倒不是這道題有多麼高深的演算法,有多麼複雜的資料結構,只因為這道題要考慮的情況比較多,大部分應聘者都沒能把所有情況都考慮到,能很好的考察應聘者的程式設計基本功和思考問...

庫函式編寫刪除函式

又是乙個利用庫函式編寫其他函式的演算法,刪除字串很簡單,我們在設計的函式裡面建立乙個新的字元陣列,這個字元陣列用來存放我們想要得到的字串,什麼是我們想要的字串?我們從頭遍歷原字串,下標在index到index length範圍之內的就是我們要刪除的字元,因此當我們遍歷到這個下標區間時,直接跳過,其他...