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範圍之內的就是我們要刪除的字元,因此當我們遍歷到這個下標區間時,直接跳過,其他...