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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑亚鸽 中级黑马   /  2014-4-25 11:16  /  862 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑亚鸽 于 2014-4-26 10:31 编辑

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

        单词。(C语言)

   程序代码: #include<stdio.h>
             #include<stdlib.h>
             #include<string.h>

             void main()
             {
                   int i,len = 0,maxlen = 0;

                   char s[1000],subs[100];
                   char *p,*q;

                   printf("请输入字符串:");
                   gets(s);

                   for(p=s;*p != '\0';p++)
                   {   
                       if((*p != ' ')&&(*p != '\0'))
                           len++;

                       else{

                                if(len > maxlen)
                                {
                                     maxlen = len;
                                     q = p-len;
                                     len = 0;
                                 }
                             }

                    }

                    for(i = 0;i < maxlen;i++)
                        subs = *(q+i);

                    subs[maxlen] = '\0';

                    printf("最长的英文单词是:%s\t,其长度是:%d\n",subs,maxlen);
               }

这个程序可以编译通过,也可以执行,但是存在漏洞;
就是比如:输进去:a aa aaa aaaa    可以得到最长字符串的长度是4
             但是输进去:i am writting to complaining  about .得不到最长字符串的长度11。why?


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

正序浏览
  1.              #include<stdio.h>
  2.              #include<stdlib.h>
  3.              #include<string.h>

  4.              void main()
  5.              {
  6.                    int i,len = 0,maxlen = 0;
  7.                    char s[1000],subs[100];
  8.                    char *p,*q;

  9.                    printf("请输入字符串:");
  10.                    gets(s);
  11.                     printf("%d",strlen(s));
  12.                    for(p=s;*p != '\0';p++)
  13.                    {
  14.                        if(*p != ' ')
  15.                        {

  16.                            len++;
  17.                        }
  18.                        else{

  19.                                 if(len > maxlen)
  20.                                 {
  21.                                      maxlen = len;
  22.                                      q = p-len;
  23.                                      len = 0;

  24.                                 }
  25.                                 len = 0;//这个可以防止统计出来的单词字符数较小的情况下,len的值没被清0。

  26.                         }
  27.                           //这段加上可以防止最后一个单词是最大的时候被漏掉的情况。
  28.                           if(*(p+1) == '\0')
  29.                             {

  30.                                 if(len > maxlen)
  31.                                 {
  32.                                      maxlen = len;
  33.                                      q = p-len+1;
  34.                                      len = 0;
  35.                                  }
  36.                             }



  37.                     }



  38.                     for(i = 0;i < maxlen;i++)
  39.                         subs[i] = *(q+i);

  40.                     subs[maxlen] = '\0';

  41.                     printf("最长的英文单词是:%s\t,其长度是:%d\n",subs,maxlen);
  42.                }
复制代码

测试输入输出如下:
输入:
a aa aaa aaaa
输出:
最长的英文单词是:aaaa ,其长度是:4

输入:
最长的英文单词是:complaining  ,其长度是:11

看看你要的是不是这样的效果,在单词间有空格的情况也测试过了,一般没有问题,但是,还是会有小bug的。因为现在只能在单词间输入空格可以统计正确,其他情况就自己加上if判断条件吧。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 z82454642 于 2014-4-25 12:50 编辑

看2楼吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马