我要编程

来源:互联网 发布:8月份上海房产成交数据 编辑:程序博客网 时间:2024/05/01 00:42
    华为编程比赛,我顺利落榜,经过短暂的失落感之后,我很快又回来coding世界了!请收了我吧,请允许我一步一步走下去,请理解我初期的蜗牛似的行进脚步,我会创造越来越靠谱的正值加速度的。
    河畔水人很多,牛人也不少,但这不是我泡汤的理由,主要还是自己真心太水了。3个题摆在我面前,不要说两个钟头coding三个,就是只把第二个拿来我c,两个钟头也未必能办妥,所以。。。哈哈,华为GG,这一次你刷掉我,是对的,但我决定:努力不给你第二次刷我的机会,哟。

    刚刚不是说到第二题嘛,虽然说出来有点更加衬托我的暴弱,但我还是说吧,立刻开始。


    1.  [自动完成]输入字符串,然后在单词本中查找有木有与输入字符串匹配的单词,若有,则输出匹配的单词到输出数组;单词本中的单词以空格相隔。
    例如:单词本中的单词集为"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标准没有布尔类型。
******************************************************************************************************

原创粉丝点击