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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

本帖被以下淘专辑推荐:

12 个回复

倒序浏览
本帖最后由 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. }
复制代码

点评

学习了  发表于 2015-11-3 20:14
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
你先看视频, 问的都是些基础问题或者你根本理解不了问题。  视频里面都有讲 ,先看完视频 在实在不会也不问这样完全没头绪的问题。
回复 使用道具 举报

这个代码有问题,如果有两个相同的最长单词呢?
回复 使用道具 举报
chasedream 发表于 2015-1-1 16:40
这个代码有问题,如果有两个相同的最长单词呢?

题里并没有说清,我写的是如果有相同的优先最早的。
回复 使用道具 举报
看来基础题每个人下载的还不一样啊,我的题里没那个
回复 使用道具 举报
表示我的题里面也有这道题。。。
回复 使用道具 举报
aofex 中级黑马 2015-6-29 17:56:07
9#

哥儿们  在while循环里  为啥count会重新计算而  int不会呀
回复 使用道具 举报
赞一个   哈哈  
回复 使用道具 举报

你这个我没看懂 能不能给我讲解一下 为什么你说不是空格也不是\0  是用while (str != ' ' && str) 这是什么意思?  还有你那个++i,那个i有什么用?你可以给我讲解一下详细的思路吗 我学了十几天了 看不懂 求指教
回复 使用道具 举报
不错,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马