| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8857 人关注过本帖
标题:寻找一个字符串中最长的单词并输出
取消只看楼主 加入收藏
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:6 
寻找一个字符串中最长的单词并输出
#include <stdio.h>
#include <string.h>
static void prin_max(char str1[],char str2[]);
int main()
{
    char flag='1';
    char str1[100],str2[100];
    while(flag=='1')
    {
      gets(str1);//一次输入一个单词
      prin_max(str1,str2);
      printf("\nDo you want to continue?Yes,print 1,No,print 0:");
      flag=getchar();//通过询问是否要继续输入,决定输入的单词数量
      printf("\n");
    }
    printf("%s",str2);
    return 0;
}
static void prin_max(char str1[],char str2[])//将长度更长的单词放入str2中,并存储更长的单词的长度
{
    int maxlen=0;
    if(strlen(str1)>maxlen)
    {
      strcpy(str2,str1);
      maxlen=strlen(str1);
    }
}
编译没问题,但运行时有两个问题
1,我每次输入一个单词后,电脑询问Do you want to continue?Yes,print 1,No,print 0:,我按1,然后enter,电脑就直接接着询问Do you want to continue?Yes,print 1,No,print 0:,而没有让我输入str1的值,为什么会这样
2,然后我改变输入方法,电脑询问Do you want to continue?Yes,print 1,No,print 0:时,我按1再输入下一个单词,再按enter,结果输入正常。但系统总的运行结果并未输出最长单词,而是输出我最后输入的单词,我哪里错了吗
搜索更多相关主题的帖子: 字符串 return include continue 单词 
2017-02-03 15:52
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 2楼 ICU
谢谢你的热心回复,你说的这个我其实想到了,但我按我的想法去调试了程序,程序如下,添加了表情位置的代码,但并没有打出:you are right,为什么,我很困惑???
#include <stdio.h>
#include <string.h>
static void prin_max(char str1[],char str2[]);
int main()
{
    char flag='1';
    char str1[100],str2[100];
    while(flag=='1')
    {
      gets(str1);//一次输入一个单词
      prin_max(str1,str2);
      printf("\nDo you want to continue?Yes,print 1,No,print 0:");
      flag=getchar();//通过询问是否要继续输入,决定输入的单词数量
      printf("\n");
    }
    if(str1[0]=='\n')
    printf("you are right");
    printf("%s",str2);
    return 0;
}
static void prin_max(char str1[],char str2[])//将长度更长的单词放入str2中,并存储更长的单词的长度
{
    int maxlen=0;
    if(strlen(str1)>maxlen)
    {
      strcpy(str2,str1);
      maxlen=strlen(str1);
    }
}

............
2017-02-03 18:39
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 4楼 wei_guang
谢谢您的回复,您用getchar()吸收enter个人觉得真的是神来之笔,有创意

............
2017-02-06 15:30
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 6楼 renkejun1942
谢谢您的回复,你指出了我程序问题的关键,就是str2和maxlen被我弄成auto变量,导致函数每次调用结束就初始化。但我还有最后一点不清楚,就是按我回复二楼改编的那个调试程序,既然你说gets会吸收除了enter外的任何字符,按你的逻辑,gets(str1)那步应该没有接收任何字符,那我回复二贴中的第一个问题怎么来的??或者gets能接受enter,那为什么运行时没有打出“you are right"??请指教

............
2017-02-06 15:37
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 9楼 renkejun1942
谢谢你的热心回复,你说的这个我其实想到了,但我按我的想法去调试了程序,程序如下,添加了表情位置的代码,但并没有打出:you are right,为什么,我很困惑???
#include <stdio.h>
#include <string.h>
static void prin_max(char str1[],char str2[]);
int main()
{
    char flag='1';
    char str1[100],str2[100];
    while(flag=='1')
    {
      gets(str1);//一次输入一个单词
      prin_max(str1,str2);
      printf("\nDo you want to continue?Yes,print 1,No,print 0:");
      flag=getchar();//通过询问是否要继续输入,决定输入的单词数量
      printf("\n");
    }
    if(str1[0]=='\n')
    printf("you are right");
    printf("%s",str2);
    return 0;
}
static void prin_max(char str1[],char str2[])//将长度更长的单词放入str2中,并存储更长的单词的长度
{
    int maxlen=0;
    if(strlen(str1)>maxlen)
    {
      strcpy(str2,str1);
      maxlen=strlen(str1);
    }
}


我想问的是这个,就是如果我的enter被gets吸收了,那为什么没有打出you are right?(我在我原来的代码里添加了一个if语句,就是两个表情夹着的那句)

............
2017-02-06 18:44
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 11楼 renkejun1942
不对啊,我的具体输入过程是这样的在;
先输入一个单词:apple
系统询问:Do you want to continue?Yes 1,No,0
我按1,然后enter,系统跳过gets,直接
询问:Do you want tontinue?Yes 1,No,0(这里说明enter应该被gets吸收了啊,所以str1[0]应该等于‘\n',也就应该打出 you are right啊???)
我按0,再enter,我对此非常不理解,请问为什么??

............
2017-02-06 20:02
邹特强
Rank: 2
等 级:论坛游民
帖 子:123
专家分:85
注 册:2016-9-21
收藏
得分:0 
回复 13楼 renkejun1942
懂你的意思了,也就是说按我那样输入str1实际上是空数组

............
2017-02-07 15:12
快速回复:寻找一个字符串中最长的单词并输出
数据加载中...
 
   



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

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