华为2014笔试算法题(字符串处理部分).doc_第1页
华为2014笔试算法题(字符串处理部分).doc_第2页
华为2014笔试算法题(字符串处理部分).doc_第3页
华为2014笔试算法题(字符串处理部分).doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华为2014笔试算法题(字符串处理部分)1.通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“deefd” 输出:“def”输入:“afafafaf” 输出:“af”输入:“pppppppp” 输出:“p”main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响1. #include 2. #include 3. 4. usingnamespacestd;5. 6. boolg_flag26;7. voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr)8. 9. assert(pInputStr!=NULL);10. inti=0;11. if(pInputStr=NULL|lInputLen=1)12. 13. return;14. 15. constchar*p=pInputStr;16. while(*p!=0)17. 18. if(g_flag(*p-a)19. 20. p+;21. else22. pOutputStri+=*p;23. g_flag*p-a=1;24. p+;25. 26. 27. pOutputStri=0;28. 29. intmain()30. 31. memset(g_flag,0,sizeof(g_flag);32. charinput=abacacde;33. char*output=newcharstrlen(input)+1;34. stringFilter(input,strlen(input),output);35. coutoutputendl;36. deleteoutput;37. return0;38. 2.通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1、仅压缩连续重复出现的字符。比如字符串abcbc由于无连续重复字符,压缩后的字符串还是abcbc。2、压缩字段的格式为字符重复的次数+字符。例如:字符串xxxyyyyyyz压缩后就成为3x6yz。要求实现函数:void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“cccddecc” 输出:“3c2de2c”输入:“adef” 输出:“adef”输入:“pppppppp” 输出:“8p”1. #include 2. #include 3. usingnamespacestd;4. voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr)5. 6. constchar*p=pInputStr;7. intnum=1;8. inti=0;9. p+;10. while(*p!=NULL)11. 12. while(*p=*(p-1)&*p!=NULL)13. 14. num+;15. p+;16. 17. if(num1)18. 19. intsize=0;20. inttemp=num;21. while(num)/计算位数 22. 23. size+;24. num/=10;25. 26. num=1;27. 28. for(intj=size;j0;j-)29. 30. pOutputStri+j-1=0+temp%10;31. temp/=10;32. 33. i+=size;34. pOutputStri+=*(p-1);35. p+;36. else37. pOutputStri+=*(p-1);38. p+;39. 40. 41. pOutputStri=0;42. 43. 44. intmain()45. 46. charinput=cccddecc;47. char*output=newcharstrlen(input)+1;48. stringZip(input,strlen(input),output);49. coutoutputendl;50. return0;51. /华为第二题 19:40 - 20:10 中间耽误3分钟 #include #include using namespace std; void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) const char *p = pInputStr; int num = 1; int i = 0; p+; while(*p != NULL) while(*p = *(p-1)& *p != NULL) num+; p+; if (num 1) int size = 0; int temp = num; while(num) /计算位数 size+; num /= 10; num = 1; for (int j = size; j 0; j-) pOutputStri+j-1 = 0+ temp%10; temp /= 10; i +=size; pOutputStri+ = *(p-1); p+; else pOutputStri+ = *(p-1); p+; pOutputStri = 0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论