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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 77媛儿 中级黑马   /  2014-3-7 11:52  /  1928 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include<stdio.h>
int main()
{
    int i=0;
    int len=0;
    int max=0;
    int j=0;
    int m=0;
    char a[100];
    printf("输入一个只含有字母和空格的字符串,间隔用空格分开");
    gets(a);
    for (i=0;a!='\0'; i++)
    {
        if (a!=' ')
        {
            len++;
            continue;
        }
        if (len>max)
        {
            max=len;
            j=i-len;
            m=i;
            len=0;
        }
    }
        for (i=j; i<m; i++) {
        printf("%c",a);
  }
            printf("字符串中最长单词为%d\n",max);

    }
为什么我加上最后的for循环,max的值就变了呢。

评分

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

查看全部评分

5 个回复

倒序浏览
最后一个循环应该是  printf("%c",a[i]);

评分

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

查看全部评分

回复 使用道具 举报
主要是 for (i=j; i<m; i++) {
        printf("%c",a);
  }这段代码,打印printf("%c",a);时候应该把a换成a[i],由于a是一个字符串数组。
你可以打印Log进行试试,那段代码的问题。

评分

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

查看全部评分

回复 使用道具 举报

代码在复制粘贴的时候a[i]的中括号没带过来,不好意思,我要问的不是这个问题
回复 使用道具 举报
本帖最后由 脸皮猴 于 2014-3-7 16:58 编辑

/*
你程序里面那个len不能在if里面清除!!因为要是你的MAX比len大的时候,那你的len就没法清除了。还有我帮你修改了下,能考虑到结尾的字符串了·
*/


#include<stdio.h>
int main()
{
    int i=0;
    int len=0;
    int max=0;
    int j=0;
    int m=0;
    char a[100];
    printf("输入一个只含有字母和空格的字符串,间隔用空格分开");
    gets(a);
      for (i=0;i<strlen(a); i++)
      {  
        if(a!=' '&&a[i+1]!='\0')
                {
                        len++;//如果当前的字符不是空且不是最后一个字符则长度加1结束当次for循环
                        continue;
                }
               
                if(a[i+1]=='\0'&&a!=' ')
                {
                        //如果当前字符是最后一个字符且当前字符不是空格的时候让下标i加1 长度len也要加1
                        i++;
                        
                        len++;
                        
                }
               
                //如果当前记录字符串的长度大于之前最大字符串的长度
                if(len>max)
                {
                        //保留最长字符串的长度
                        max = len;
                        //保留最长字符串的起始下标
                        j   = i-len;
                        //保留最长字符串的结尾下标
                        m = i - 1;
                        //将长度清0
                     
                }
              len = 0;
                  
         
          }
       printf("字符串中最长单词为%d\n",max);
      
        printf("最长的字符串是:");
        //打印最长字符串
        for (i=j; i<=m; i++)
                        {
               printf("%c",a);
            }
            printf("\n");
         
    }


评分

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

查看全部评分

回复 使用道具 举报
在定义的时候 你的a是数组所以最后输出的时候你应该也输出数组
for (i=j; i<m; i++) {
        printf("%c",a[i]);
  }c 语言中没有直接输出数组的 所以需要用for循环每次输出一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马