河畔水人很多,牛人也不少,但这不是我泡汤的理由,主要还是自己真心太水了。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标准没有布尔类型。
******************************************************************************************************