| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:输入一行字符,输出最长的单词。怎么做。
取消只看楼主 加入收藏
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
输入一行字符,输出最长的单词。怎么做。
这个问题刚开始我觉得简单,可是做了一会儿却没有想出。
输入一行字符,求出有几个单词这个我会。
搜索更多相关主题的帖子: 单词 
2013-08-01 20:31
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
如果有多个最长的单词,都要输出。
2013-08-01 20:33
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
我找了网上的一些代码运行了一下,发现都有问题。
2013-08-01 20:37
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 4楼 TonyDeng
我是真的会求单词数但是却求不出单词字符个数,要不你指点一下。下面是我求单词个数的代码:
程序代码:
# include <string.h>
int main(void)
{
  int i,sum=0;
  char string[81];
  gets(string);
            
  for(i=0;string[i]!='\0';i++)
  {
        if(string[i]!=' ' && string[i+1]==' ')
        sum++;
  }
  printf("这一行字符中总共有%d个单词\n",sum+1);
}

2013-08-01 21:36
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 6楼 q13678986740
不对吧,我输入what is your name,却输出了5.这里面有长度为5的单词吗?

Please input:
what is your name
5请按任意键继续. . .
2013-08-01 21:57
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 10楼 TonyDeng
我现在会了。
思路就是顺序扫描。如果不是空格就累加,如遇到空格或者0累加就停止。每扫描完一个单词就用一个变量保存它的长度,并和一个变量max比。max初值为0.如果比max大,就把它赋给max。这样全部扫描完毕之后,max里保存的就是最长的那个单词的长度。

可是这样有一个问题。如果一句话当中有好几个最长的单词呢。比如:what is your name.
这句话当中有what 、your、name共3个单词的长度为4.所以应该输出:
what:4
your:4
name:4

我看了网上其它的一些代码,他们好像都是只输出一个最长的。
是不是可以用二维数组来解决?把每一个单词放到二维数组的第二维当中,然后用一个for来判断所有单词的长度(用strlen),并记录最大的有几个。

2013-08-02 19:01
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 11楼 TonyDeng
你讲的很对
2013-08-02 19:03
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
呵呵,文件操作还不会。我学C还没多久呢。
我好像弄出来了。
可以把一行字符中所有最长的单词都提取出来。你看看,提点意见吧,我知道你是高手。
程序代码:
#include <stdio.h>
#include <string.h>
main()
{
    char a[20][20];//定义二维数组,可存储20个,每个最长为20的单词
    int i,j,len,max=0;
    char c ;
  
    printf("请输入一行字符,以回车结束: ");
    for(i=0;i<20;++i)
    {
        j=0 ;//j每次都要从0开始
        while((c=getchar())!='\n'&&c!=' ')//当输入的字符不为回车或者空格时
        {
            a[i][j]=c;
            j++;
        }
        if(c==' ')   a[i][j]='\0' ;//如果扫描到是空格,则加0
        if(c=='\n')//如果扫描到是回车,则加0并退出
        {
            a[i][j]='\0' ;
            break ;
        }
    }
    len=i+1 ;//len就是单词的个数
    for(i=0;i<len;++i)//此循环找到最大单词的个数并保存在max中
    {
        if(max<strlen(a[i]))
               max=strlen(a[i]);
          
    }

 
      for(i=0;i<len;++i)//此循环把所有长度等于max的单词都输出
     {
          int t;
         if(strlen(a[i])==max)
             {
             t=i;
             printf("最长的单词为%s,长度为%d\n",a[t],max);
             }
     }    

 
}
代码:

[ 本帖最后由 艺术的生活 于 2013-8-2 20:48 编辑 ]
2013-08-02 20:29
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 16楼 TonyDeng
真的非常感谢。

我先把你的程序好好学习一下,然后想一想如果加上标点的话应该怎么处理。
再次感谢。
2013-08-04 16:20
快速回复:输入一行字符,输出最长的单词。怎么做。
数据加载中...
 
   



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

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