标题:帮帮忙,看下面这个程序
只看楼主
shiningwater
Rank: 1
等 级:新手上路
帖 子:51
专家分:5
注 册:2010-3-25
结帖率:93.75%
已结贴  问题点数:10 回复次数:12 
帮帮忙,看下面这个程序
作用是输出一个字符串中最长的单词。

#include<stdio.h>
void main()
{
  void word(char a[]);
  char str[20];
  printf("input a string:\n");
  gets(str);
  word(str);
}

void word(char a[20])
{
  int i,p=0,q=0,k=0;
  for(i=0;a[i]!=' ';i++)
  p++;
  for(i=0;a[i]!='\0';i++)
  {
    if(a[i]==' ')
    {
       if(q>p)
       {
         p=q;
         k=i-p;
       }

       q=0;

     }

     else q++;

  }

  for(i=k;i<=p;i++)
   printf("%c",a[i]);

}


我是想让p始终存放当前最长单词的长度,q存放当前单词的长度。但是结果不对
搜索更多相关主题的帖子: 字符串 word 
2010-09-17 12:16
shiningwater
Rank: 1
等 级:新手上路
帖 子:51
专家分:5
注 册:2010-3-25
得分:0 
小改一下程序:但结果仍不对
#include<stdio.h>
void main()
{
  void word(char a[]);
  char str[20];
  printf("input a string:\n");
  gets(str);
  word(str);

  getch();

}

void word(char a[20])
{
  int i,p=0,q=0,k=0;
  for(i=0;a[i]!=' ';i++)
  p++;
  for(i=0;a[i]!='\0';i++)
  {
    if(a[i]==' ')
    {
       if(q>p)
       {
         p=q;
         k=i-p;
       }

       q=0;

     }

     else q++;

  }

  for(i=k;i<=p+k;i++)
   printf("%c",a[i]);

}
2010-09-17 12:22
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
得分:0 
。。。。。。。。。。。。。。你看这样行不,用strlen函数得到的值,赋值给变量,在用变量来比较。。。。。。。。你看行不

[ 本帖最后由 A13433758072 于 2010-9-17 12:52 编辑 ]

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-17 12:41
shiningwater
Rank: 1
等 级:新手上路
帖 子:51
专家分:5
注 册:2010-3-25
得分:0 
额额~~楼上的麻烦说明确一点可以不,小的有点看不懂额
2010-09-17 13:35
shiningwater
Rank: 1
等 级:新手上路
帖 子:51
专家分:5
注 册:2010-3-25
得分:0 
顺便说一句,getch()是多余的。
2010-09-17 13:35
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
得分:0 
#include<stdio.h>
void main()
{
  void word(char a[20]);
  char str[20];
  printf("input a string:\n");
  gets(str);
  word(str);

  getch();

}

void word(char a[20])
{
    int i,p=0,q=0,k;
  for(i=0;a[i]!=' ';i++)
  ++p;
  for(i=0;a[i]!='\0';i++)
  {
    if(a[i]==' ')
    {
       if(q>p)
       {
         p=q;
         k=i+1;
       }

       q=0;
     }

    else ++q;

  }

  for(i=0;i<p;i++)
   printf("%c",a[k++]);

}
我也小改动,先说明,这是错的,我看了n遍,也没看出来错哪了?错哪了?
2010-09-17 13:53
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
得分:0 
回复 6楼 自由战士89
你到底要整啥啊?你数组到底有啥

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-17 14:19
qfny88
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-8-18
得分:0 
回复 楼主 shiningwater
首先函数传参数值就有问题,数组作为函数参数时自动退化为指针。你那个word函数写的有问题,数组名和数组个数要分开传,而且main函数中没有定义a就传到word中去了。你先把这个修改一下试试。
2010-09-17 14:55
shiningwater
Rank: 1
等 级:新手上路
帖 子:51
专家分:5
注 册:2010-3-25
得分:0 
改好了,以下是正确程序。供大家看看


#include<stdio.h>
#include<string.h>
void main()
{
  void word(char a[]);
  char str[20];
  printf("input a string:\n");
  gets(str);
  word(str);

  getch();

}

void word(char a[20])
{
  int i,p=0,q=0,k=0;

  for(i=0;i<=strlen(a);i++)
  { if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
       q++;
    else
    {
       if(q>p)
       {
         p=q;
         k=i-p;
       }

       q=0;

     }



  }

  for(i=k;i<=p+k;i++)
   printf("%c",a[i]);

}
2010-09-17 15:00
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
得分:5 
回复 7楼 A13433758072
跟楼主的意思一样
作用是输出一个字符串中最长的单词。
让p始终存放当前最长单词的长度,q存放当前单词的长度
2010-09-17 22:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-320696-1-1.html




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

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