A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ios_xiaot 于 2015-7-2 22:38 编辑
  1. </blockquote></div><div><div class="blockcode"><blockquote>#include <stdio.h>
  2. #define MAX_BUFFER 100

  3. int main(int argc, const char * argv[]) {
  4.     // insert code here...
  5.    
  6.     //note:若有相同长度的单词,则全部输出
  7.    
  8.     char buffer[MAX_BUFFER+1] = "warning: this program1 program35 program46 uses gets(), which is unsafe. program2";
  9.     char tmpBuffer[MAX_BUFFER+1] = {0};
  10.     //1.初始化单词最长的起始位置
  11.     int posArray[MAX_BUFFER] = {0};
  12.     //2.拷贝到临时数组中
  13.     strcpy(tmpBuffer,buffer);
  14.    
  15.     //3.定义变量count:字符串最大长度,tmpcount:循环中最大长度,startPos:最长字符串的起始位置
  16.     int i = 0,k = 0,count = 0,tmpcount = 0;
  17.     while (tmpBuffer[i] != '\0') {
  18.         if (' ' == tmpBuffer[i]) {
  19.             //3.1如果最大长度小于,循环中最大长度
  20.             if(count < tmpcount){
  21.                 //将pos数组设置为空
  22.                 for (int m = 0;m <= k; m++) {
  23.                     posArray[m] = 0;
  24.                 }
  25.                 posArray[0] = i-tmpcount;
  26.                 count = tmpcount;
  27.                 k = 0;
  28.             }else if(count == tmpcount){
  29.                 //3.2如果位置相同,添加新的启示坐标
  30.                 posArray[++k] = i-tmpcount;
  31.             }
  32.             tmpcount = 0;
  33.         }
  34.         else{
  35.             tmpcount++;
  36.         }
  37.         i++;
  38.         
  39.     }
  40.    
  41.     //4.检测最后一个单词是否为最长
  42.     if(tmpcount > count){
  43.         //startPos = i - tmpcount;
  44.         for (int m = 0;m <= k; m++) {
  45.             posArray[m] = 0;
  46.         }
  47.         posArray[0] = i - tmpcount;
  48.         k = 0;
  49.     }else if(tmpcount == count){
  50.         posArray[++k] = i-tmpcount;
  51.     }

  52.     //5.循环输出数组
  53.     printf("原的字符串为:%s\n最长的单词为:",buffer);
  54.     for (int m = 0; m <= k; m++) {
  55.         tmpBuffer[posArray[m]+count] = '\0';
  56.         printf("%s ",tmpBuffer+posArray[m]);
  57.     }
  58.     printf("\n");
  59.     return 0;
  60. }
复制代码


以上是我的解法,当时做题时考虑到有可能有相同长度的单词有可能有重复的,编码时注意到了此点。
上面解法感觉有点复杂,请同学们看下是否可以优化下。
另:不知道发此类信息是否违规,若违规则请版主提醒,会及时删除。


评分

参与人数 1黑马币 +6 收起 理由
云低水漫 + 6 终于找到比较好的答案了!!

查看全部评分

8 个回复

倒序浏览
这是哪位同学给的HMB啊,感谢啊
回复 使用道具 举报
还有人送黑马币...好人呐!!!
回复 使用道具 举报
学到了,楼主有心人啊!
回复 使用道具 举报
不错的小伙子
回复 使用道具 举报
lipeng524824 来自手机 中级黑马 2015-7-4 00:48:05
地板
哈哈 好人啊
回复 使用道具 举报
学习了,继续分享好东西
回复 使用道具 举报
感谢楼主!
回复 使用道具 举报
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马