1.1題目描述:
給定一個字符串A,要求在A中查找一個子串B。
如A="ABCDF",要你在A中查找子串B=“CD”。
思路:
(1)循環A字符串,時間複雜度(n×m)
(2)KMP匹配算法,時間複雜度(n+m)
1.2、題目描述
在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。
思路:hasnTable,字符作爲key,次數爲值,最後按字符順序循環hashtable,輸出次數爲1的。也可以用數字代替hashTable。
第二節、字符串拷貝
題目描述:
要求實現庫函數strcpy,
原型聲明:extern char *strcpy(char *dest,char *src);
功能:把src所指由NULL結束的字符串複製到dest所指的數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針。
思路:
//得2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != '\0' );
}
//得4分
void strcpy( char *strDest, const char *strSrc )
{
//將源字符串加const,表明其爲輸入參數,加2分
while( (*strDest++ = * strSrc++) != '\0' );
}
//得7分
void strcpy(char *strDest, const char *strSrc)
{
//對源地址和目的地址加非0斷言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != '\0' );
}
//得9分
//爲了實現鏈式操作,將目的地址返回,加2分!
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != '\0' );
return address;
}
//得10分,基本上所有的情況,都考慮到了
//如果有考慮到源目所指區域有重疊的情況,加1分!
char * strcpy( char *strDest, const char *strSrc )
{
if(strDest == strSrc) { return strDest; }
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != '\0' );
return address;
}