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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. //声明一个字符串
  2.         char* str = "Keep on going never give up";
  3.         //声明一个数组,用来存放字符串的子字符串
  4.         char* subStr[20];
  5.         //声明一个数组,用来存放每个子字符串的长度
  6.         int length[20];
  7.         //说明子字符串的个数
  8.         int subCount = 0;
  9.         int i = 0;
  10.         //j用来表明下一个子字符串的起始位置
  11.         int j = i;
  12.         //用来指向动态分配的空间
  13.         char* temp;
  14.         
  15.         //遍历大字符串的所有元素。
  16.         while (str[i] != '\0')
  17.         {
  18.             if(str[i] == ' ')
  19.             {
  20.                 //如果某个元素为空格的话,则获取相应的子字符串
  21.                 temp = (char*)malloc((i - j + 1) * sizeof(char));
  22.                 int count = 0;
  23.                 for(int k = j; k<i; k++)
  24.                 {
  25.                     temp[count] = str[k];
  26.                     //将子字符创放到子字符串数组中
  27.                     subStr[subCount] = temp;
  28.                     count++;
  29.                 }
  30.                 //字符串结束标识
  31.                 temp[count] = '\0';
  32.                 //将长度放到长度数组中
  33.                 length[subCount] = count;
  34.                 subCount++;
  35.                
  36.                 //让j指向下一个子字符串的起始下标
  37.                 j = i + 1;
  38.             }
  39.             i++;
  40.         }
  41.         
  42.         //这是对结尾处的最后一个子串进行操作,步骤同前面一样
  43.         temp = (char*)malloc((i - j + 1) * sizeof(char));
  44.         int count = 0;
  45.         for(int k = j; k<i; k++)
  46.         {
  47.             temp[count] = str[k];
  48.             subStr[subCount] = temp;
  49.             count++;
  50.         }
  51.         temp[count] = '\0';
  52.         length[subCount] = count;
  53.         subCount++;
  54.         
  55.         //计算出长度数组中至最大的元素
  56.         int maxLength = length[0];
  57.         for(int i = 0; i<subCount; i++)
  58.         {
  59.             if(maxLength < length[i])
  60.             {
  61.                 maxLength = length[i];
  62.             }
  63.             //打印子字符串数组和长度数组中的每一个元素,他们是相互对应的
  64.             printf("%s, %i\n", subStr[i], length[i]);
  65.         }
  66.         //打印数组中长度最大的值
  67.         printf("maxlength: %i\n", maxLength);
  68.         
  69.         //遍历子字符串数组,找到长度最长的子字符串,打印,可能是多个。。
  70.         for(int i = 0; i<subCount; i++)
  71.         {
  72.             if(strlen(subStr[i]) == maxLength)
  73.             {
  74.                 printf("max long string : %s\n", subStr[i]);
  75.             }
  76.             //将对上的空间都释放掉。
  77.             free(subStr[i]);
  78.       
复制代码
参考网上的代码,自己做的时候没有做出来

本帖被以下淘专辑推荐:

4 个回复

倒序浏览
  1. 这是我这个程序的C语言代码,不过有个bug,当有不止一个单词最长长度时,只能输出最前面的一个。

  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.     //(BUG)此代码当最长单词有多个时,按最靠前最长单词的输出
  7.     char s[200];
  8.     char *p1, *p2;  //p1用于指向字符串的各个字符,p2用于指向最长单词的首字符
  9.     int max=0, len=0;
  10.     printf("请输入字符串: ");
  11.     gets(s);
  12.     p1=s;
  13.    
  14.     for (int i=0; i<=strlen(s); i++)
  15.     {
  16.         if ((s[i]==' ') || (s[i]=='\0'))    // 如果当前字符为空格或结束,则比较当前单词长度是否大于最大值,再将长度复位。
  17.         {
  18.             if (len>max)
  19.                {
  20.                    max=len;
  21.                 p2=p1;
  22.                 len=0;
  23.                }
  24.             else if (len==max)
  25.                
  26.         }
  27.         
  28.         else        // 如果当前字符非空,如果当前长度为0,表示新单词。
  29.         {
  30.             if (len==0)
  31.                 p1=&s[i];
  32.             ++len;
  33.         }
  34.     }
  35.    
  36.     printf("最长的英文词是:");
  37.     while (*p2 && *p2!=' ') //输出最长单词
  38.         printf("%c", *p2++);
  39.     printf("\n");
  40.     return 0;
  41. }
复制代码


回复 使用道具 举报
最近才开始认真做C语言基础测试,各种error 各种warning,真是醉了
回复 使用道具 举报
楼主你这个和题目要求不一样吧,你这个是数组了,题目要求就是一个字符串中
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马