黑马程序员技术交流社区

标题: 这是我下载的基础题,不会做,谁帮我看看这题,。谢谢! [打印本页]

作者: 菜鸟八哥    时间: 2014-12-31 17:49
标题: 这是我下载的基础题,不会做,谁帮我看看这题,。谢谢!
在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
作者: Mike_zh    时间: 2014-12-31 20:28
本帖最后由 Mike_zh 于 2014-12-31 20:38 编辑

这是我做的 C语言版的 基本上没用什么库函数,字符串的什么的
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. char *maxStr(char *str)
  4. {
  5.     char *p = str; // 因为后面还要用到str 所以先用p操作str
  6.     int maxLen = 0; // 记录最大长度
  7.     int curLen = 0; // 记录当前正在遍历的单词的长度
  8.     int index = 0; // 记录正在遍历的字符在整个串中的位置
  9.     int beginIndex = 0; // 记录单词的开始位置
  10.     while (*p)
  11.     {// 如果不是空格 当前单词的长度+1
  12.         if (*p != ' ')
  13.         {
  14.             curLen++;
  15.         }
  16.         else
  17.         {
  18.             if (curLen > maxLen) // 如果是空格且当前单词的长度大于最大长度
  19.             {
  20.                 maxLen = curLen;
  21.                 beginIndex = index - curLen;  // 记录下这个最长单词的开始位置
  22.             }
  23.             curLen = 0; // 计数回零
  24.         }
  25.         p++;
  26.         index++;
  27.     }
  28.     // 遍历最后一个单词
  29.     if (curLen > maxLen)
  30.     {
  31.         maxLen = curLen;
  32.         beginIndex = index - curLen;
  33.     }
  34.     // 动态创建字符串q使之与最长字符串相等
  35.     char *q = (char *)calloc(maxLen+1, sizeof(char));
  36.     for (int i = 0; i < maxLen; i++)
  37.     {
  38.         q[i] = str[beginIndex+i];
  39.     }
  40.     q[maxLen] = '\0';
  41.     return q;
  42. }

  43. int main()
  44. {
  45.     printf("最长的单词是%s\n", maxStr("abc abcd abcdfg abdf"));
  46.     return 0;
  47. }
复制代码


作者: 从今以后    时间: 2014-12-31 20:39
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main() {
  4.     char str[] = "In a known to find the longest word in the string assume that the string contains only letters and Spaces the blank space to separate different words";
  5.     int maxCount = 0; // 记录最大长度
  6.     int index = 0;    // 记录单词尾字符下标
  7.     for (int i = 0; i < strlen(str); ++i) {
  8.         int count = 0; // 记录新单词长度
  9.         while (str[i] != ' ' && str[i]) { // 字符不是空格也不是\0
  10.             ++i;
  11.             ++count;
  12.         }
  13.         if (count > maxCount) {
  14.             maxCount = count;
  15.             index = i - 1;
  16.         }
  17.     }
  18.     printf("最长单词是:");
  19.     for (int i = index - maxCount + 1; i <= index; ++i)
  20.         printf("%c", str[i]);
  21.     printf("\n");
  22.     return 0;
  23. }
复制代码

作者: 15021367785    时间: 2015-1-1 10:55
你先看视频, 问的都是些基础问题或者你根本理解不了问题。  视频里面都有讲 ,先看完视频 在实在不会也不问这样完全没头绪的问题。
作者: chasedream    时间: 2015-1-1 16:40
从今以后 发表于 2014-12-31 20:39

这个代码有问题,如果有两个相同的最长单词呢?
作者: 从今以后    时间: 2015-1-1 17:46
chasedream 发表于 2015-1-1 16:40
这个代码有问题,如果有两个相同的最长单词呢?

题里并没有说清,我写的是如果有相同的优先最早的。
作者: 世界静极    时间: 2015-1-1 17:56
看来基础题每个人下载的还不一样啊,我的题里没那个
作者: HunterTim    时间: 2015-6-15 18:39
表示我的题里面也有这道题。。。
作者: aofex    时间: 2015-6-29 17:56
从今以后 发表于 2014-12-31 20:39

哥儿们  在while循环里  为啥count会重新计算而  int不会呀
作者: wxh794708907    时间: 2015-7-22 21:45
赞一个   哈哈  
作者: wxh794708907    时间: 2015-7-24 21:45
从今以后 发表于 2014-12-31 20:39

你这个我没看懂 能不能给我讲解一下 为什么你说不是空格也不是\0  是用while (str != ' ' && str) 这是什么意思?  还有你那个++i,那个i有什么用?你可以给我讲解一下详细的思路吗 我学了十几天了 看不懂 求指教
作者: flairamyz    时间: 2015-11-9 23:17
不错,赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2