| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:字符数组的一个问题
只看楼主 加入收藏
panrui0512
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2014-1-11
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
字符数组的一个问题
要求:从键盘输入一行字母,查找该行字母最长的单词
#include<stdio.h>
int main()
{
    char line[100];
    int i=0,a,b=0,c,max=0;
    while((line[i++]=getchar())!='\n')
        line[i]='\0';
    for(i=0;line[i]!='\0';i++){
        if(line[i]>='a'&&line[i]<='z')
            b++;
        else
        {
            if(max<b)
                max=b;
            c=i;b=0;}
    }
    for(i=c-max;i<c;i++)
        printf("%c",line[i]);
    return 0;}
大家看看哪儿不对,请多多指教;另外
#include<stdio.h>
#include<stdlib.h>
int main()
{
    char line[100];
    int maxlen=0,i=0,max=0,end=0;
    int wordflag=0;
    while((line[i++]=getchar())!='\n');
    line[i]='\n';
    for(i=0;line[i]!='\n';i++){
        if(line[i]<='z'&&line[i]>='a')
        {
            if(!wordflag)
                wordflag=1;
            maxlen++;}
        else{
            wordflag=0;
            if(max<maxlen)
            {
                max=maxlen;
                end=i;}
            maxlen=0;}
    }
    for(i=end-max;i<end;i++)
          printf("%c",line[i]);
    printf("\n");system("pause");
    return 0;}
这是我们书上的,有一点半天弄不清楚,就是wordflag有什么用,请多指教
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 panrui0512 于 2014-2-20 15:34 编辑 ]
搜索更多相关主题的帖子: 字母 键盘 单词 return include 
2014-02-20 15:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:8 
我来说说这个程序的逻辑罢 感觉你对这个逻辑不大明白

程序代码:
     if(line[i]<='z'&&line[i]>='a')
     {
         /* 这个if是判断当前是否是一个字符 如果是 就是说这里在一个单词內 */
         /* 这里的wordflag也是干这个的 如果是1 则表明当前在一个单词内 */
         if(!wordflag)
             wordflag=1; /* 所以这里如果不是1 赋值给1 */
         maxlen++;         /* 并且最大长度加1 */
     }
     else
     {
         /* 如果不是字符 认为是单词的分隔符 首先把wordflag变成0 */
         wordflag=0;
         if(max<maxlen)
         {
             /* 这里始终把最大的长度存起来 */
             max=maxlen;
             end=i;
         }
         maxlen=0;
     }


我记得我当年学的时候也写过这个程序。。。
2014-02-20 17:44
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这里的flag 旗子 或者叫标志 就是一种特殊的变量 一般是布尔值 也可以直接赋值1和0 意思一样 就是专门用来判断状态的 比如你开始吃饭了 就eating_flag=1 下面知道是否在吃饭 直接判断这个值就可以了 这是程序里面一种很基本的思想 建议你多琢磨琢磨

祝你好运
2014-02-20 17:47
panrui0512
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2014-1-11
收藏
得分:0 
回复 3楼 zklhp
非常感谢您能前来驻足给我释疑,可是您看一下我写的那个程序哪儿不对,另外,我认为那个wordflag有没有都可以吧,
2014-02-21 13:02
panrui0512
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2014-1-11
收藏
得分:0 
回复 3楼 zklhp
对了,还有那个程序显示“烫烫?”这类情况是什么原因呢
2014-02-21 13:03
去年丶夏天
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:28
注 册:2014-2-19
收藏
得分:2 
wordflag也许是为了调试时候判断字母是不是同一个单词中的,我也觉得要不要没什么关系
2014-02-21 17:25
去年丶夏天
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:28
注 册:2014-2-19
收藏
得分:0 
烫烫?应该是你没有初始化数组,char line[100] = {0};试试,系统会给没有初始化的变量随机值,定义变量的时候是需要初始化的
2014-02-21 17:38
panrui0512
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2014-1-11
收藏
得分:0 
我终于又想了想,对程序进行了改进,发现了其错误所在。七楼:其实不是所以的数组都必须初始化,系统会随机给它们赋值;至于那个烫烫,则是程序里少了一个大括号所致;
这是我反复琢磨了好几天,也不知道对不对,希望有人能出来指点一下,非常感谢。大家看一下确实少一个括号
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-02-21 18:48
快速回复:字符数组的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017721 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved