河畔水人很多,牛人也不少,但這不是我泡湯的理由,主要還是自己真心太水了。3個題擺在我面前,不要說兩個鐘頭coding三個,就是隻把第二個拿來我c,兩個鐘頭也未必能辦妥,所以。。。哈哈,華爲GG,這一次你刷掉我,是對的,但我決定:努力不給你第二次刷我的機會,喲。
剛剛不是說到第二題嘛,雖然說出來有點更加襯托我的暴弱,但我還是說吧,立刻開始。
例如:單詞本中的單詞集爲"chengdu chongqing huanghe changjiang",我輸入"ch",則應輸出"chengdu chongqing changjiang"......
函數原型:
void auto_complete(char *dict,char *input,char output[])
函數定義:
/************************************************************
* Name: auto_complete
* Copyright: @ee
* Author: 辰採星
* Date: 2012-04-25
* Description: 爲了賣關子,就不了,並且cut掉註釋哦
*************************************************************/
void auto_complete(char *dict,char *input,char output[])
{
if(NULL == dict || NULL == input || NULL == output)
{
printf("Invalid arguments!\n");
getchar();
exit(1);
}
char *p = output;
int k = 0;
int j = 0;
int i = 0;
while(*(dict + i) != '\0')
{
while(' ' == *(dict + i))
++i;
while(*(input + j) != '\0' && *(dict + i) != '\0')
{
if(*(dict + i) == *(input + j))
{
++i;
++j;
}
else
break;
}
if('\0' == *(input + j) && (0 == (i - j) || ' ' == *(dict + i - j - 1)))
{
for(k = i - j;*(dict + k) != ' ';++p,++k)
*p = *(dict + k);
*(p++) = ' ';
j = 0;
}
else
{
j = 0;
}
++i;
}
*p = '\0';
}
coding & testing後感:
修正思路的錯誤就花了哥哥幾百滴汗水啊!然後仍然百調不得其解,今天走在去食堂的途中,纔有一道靈光打在我的腦袋上,媽呀,是不是。。。?回宿舍一改。。。最後知道真相的我眼淚掉下來。。。尼瑪,果然是你啊——'\0',冷落了你這麼久,太對不住了,請原諒我吧,看在我也受了時間之罰的情分上。
當然,這個函數依賴於C風格的字符串,這是不妥之一。應該還有之二、之三。。。等等吧,等我線下尋找。
2. 《編程之美》上有這麼一道小題,給定一個主串s1,拿一個模式串s2來,看s2能否在s1中通過循環移位來找到匹配的字串,能則返回true,否則返回false。
例如:s1 = "AABECD",s2 = "CDAA",應該返回true;而如果s2 = "BED",則要返回false了。
函數原型:
_Bool rot_match(char *dict,char *input)
函數定義:
/*******************************************************************
* Name: RotateMatch
* Copyright: @ee
* Author: 辰採星
* Date: 2012-04-23
* Description: 也cut掉註釋哦,我再想想我的邏輯對了沒有呢
********************************************************************/
_Bool rot_match(char *dict,char *input)
{
int len_in = strlen(input);
int len_dict = strlen(dict);
int len_tmp = 2 * len_dict;
int i = 0;
int j = 0;
while(i < len_tmp)
{
if(*(dict + i % len_dict) == *(input + j))
{
++i;
++j;
}
else
++i;
}
if(len_in == j)
return true;
else
return false;
}
字符串真是不容易操控啊!
******************************************************************************************************
Review @ 2012-04-27 :
auto_complete()函數作了多餘的比較,因爲是單詞左端匹配查詢得嘛,比如,一旦首字母失配,就應該直接比較下一個單詞,而不是上述代碼裏所做的:繼續比較,之後再來判斷有木有失配。當然,我覺得這個字典結構本身不完美,要是組織成指針數組,就漂亮點了。
Review @ 2012-04-30 :
C99之前的C標準沒有布爾類型。
******************************************************************************************************