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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近才开始走黑马的入学流程,没有基础的小白,程度是基础视频13天。这个是我的黑马基础测试的一道题。
在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {  
//   定义char 类型字符串
    char str[1000] ="daewr frewrew rewrgreyh ";
//    定义单词长度
    int length = 0;
    int maxLength = 0;
//    定义最长单词后面的空格的位置
    int num = 0;
//    循环遍历字符串
//    quchu字符,遇到0结束
    for (int i=0; str[i]!='\0'; i++) {
//        如果不是空格
        if (str[i]!=' ') {
            length++;
//            如果是‘ ’
        } else if(length>=maxLength){
//            得到最长单词长度
            maxLength = length;
            
            length = 0;
            num = i;
        }
    }
//    打印最长单词
    for (int i=num-maxLength; i<num; i++) {
        printf("%c",str[i]);
    }
//    存在bug ,最后一个单词必须要加‘ ’
    return 0;
这个是我的思路,后面还有一个bug,自己搞不来了,求助给位

6 个回复

倒序浏览
你在判断是不是空格的地方加上···&&是不是到了数组的最后一位
回复 使用道具 举报
刘彦麟 发表于 2015-7-26 20:15
你在判断是不是空格的地方加上···&&是不是到了数组的最后一位

没懂你的意思,代码我反复测试过,唯一行不通的就是最后那个单词结束没有空格的话那个单词检测不到
回复 使用道具 举报
xiaochongzi 发表于 2015-7-26 20:20
没懂你的意思,代码我反复测试过,唯一行不通的就是最后那个单词结束没有空格的话那个单词检测不到 ...

我的意思就是说···你在判断是否是空格的同时也到判断是都到了数组最后一位,,是用||····不是&&···之前打错了····
大概意思就是
if(str==' '||i==(数组的长度))

我写的if跟你的if是相反的··但意思是差不多的··
回复 使用道具 举报
刘彦麟 发表于 2015-7-26 20:35
我的意思就是说···你在判断是否是空格的同时也到判断是都到了数组最后一位,,是用||····不是&&· ...

那样最后一个单词不加空格还是检查不到啊,你可以写代码测试一下
回复 使用道具 举报
求解答?????
回复 使用道具 举报
#include <stdio.h>
#include <string.h>
int main()
{
        char a[10000];
        int n,i,j,sum=0,t=0,max=0;      //n记录数组长度,sum记录单词长度,t记录最长单词坐标,max记录单词最长长度

        gets(a);                   //输入字符串
        n=strlen(a);                 //统计字符串长度

        for(i=0;i<n;i++)
        {
                if(a[i]!=' ')
                {
                        sum++;                  //检测单词长度
                }
                if(a[i]==' '||i==n-1)         //判断空格的同时判断是否进行到数组的最后一位
                {
                        if(sum>max)                 //这个单词如果比之前的单词大,执行以下
                        {
                                max=sum;               
                                sum=0;                   //sum=0,是为了下一个单词,所以长度归0
                                t=i;                      //记录当前最长单词长度坐标
                        }
                        else                       
                                sum=0;
                }
        }
        printf("%d\n",max);
        if(t==n-1)                          //如果是最后一个单词最大的话···t就要+1,为下面的循环铺,你可以把这句去掉··然后运行就知道了··
                t++;
        for(i=t-max;i<t;i++)
        {
                printf("%c",a[i]);
        }
        printf("\n");
        return 0;
}



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