| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4312 人关注过本帖, 1 人收藏
标题:字符串中的最长单词
只看楼主 加入收藏
songsfly
Rank: 1
来 自:厦门大学
等 级:新手上路
帖 子:44
专家分:0
注 册:2008-11-25
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
字符串中的最长单词
大家帮忙看一下。目标是找出字符串中最长的单词,看看我的程序到底问题在哪儿
#include"stdio.h"
int d,c,n;
void main()
{
    char a[1000];
    char longest(char a[]);
    printf("请用英文输入一句话\n");
    gets(a);
    longest(a);
    for(;c<d;c++)
        printf("%c",a[c]);
}
char longest(char a[])
{
    int i=0,max=0;
    while(a[i]!='\0')
    {  n=0;
       while(a[i]!=' ')
       {   n++;
           i++;
       }
        if(n>max){max=n;d=i;c=d-n;}//c为最长单词的起始字母位置,d为结束位置。
        i++;
    }
}
搜索更多相关主题的帖子: 字符 单词 
2008-11-28 23:56
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
呵呵,觉得你的程序错的太多。我想应该设置两个数组,一个放各单词的位置,一个放相应长度,再找出最长单词。
2008-11-29 00:40
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*------------------------------------------------------------------------------

        写了这么个小程序,程序写得很烂,而且没有避免输入时如果相同字符出现多次,
    输出不是一次这样的错误。其实只要定义个二维数组,然后再用一函数过滤一下即可。

        太晚了,要睡觉了,以后再改吧。

-----------------------------------------------------------------------------*/

#include <stdio.h>
#include<string.h>
#define N 1000
void Max(char *MAX,char *a)
{
    char *q;
    char _m[N],*m;
    *MAX=0;
    while(*a)
    {
        while(*a==' ')
            a++;
        m=_m;
        *m=0;
        q=a;
        while((*q>='a'&&*q<='z')||(*q>='A'&&*q<='Z'))
            *m++=*q++;
        *m=0;
        if(strlen(_m)==strlen(MAX)&&(strcmp(_m,MAX)!=0))
            puts(_m);
        if(strlen(_m)>strlen(MAX))
        {
            strcpy(MAX,_m);
            m=_m;
        }
        a=q;
    }
}
int main(void)
{
    char MAX[N],a[N];
    printf("input a[]:\n");
    gets(a);
    Max(MAX,a);
    printf("%s \n %d\n",MAX,strlen(MAX));
    return 0;
}



2008-11-29 03:18
songsfly
Rank: 1
来 自:厦门大学
等 级:新手上路
帖 子:44
专家分:0
注 册:2008-11-25
收藏
得分:0 
程序代码:
#include"stdio.h"
int d,c,n;
void main()
{
    char a[1000];int i;
    char longest(char a[]);
    printf("请用英文输入一句话\n");
    gets(a);
    longest(a);
    printf("最长的单词是\n");
    for(i=c;i<d;i++)
        printf("%c",a[i]);
    printf("\n");
}
char longest(char a[])
{
    int i=0,max=0;
    while(a[i]!='\0')
    {  n=0;
    while((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
    {   n++;
        i++;
    }
    if(n>max){max=n;d=i;c=d-n;}//c为最长单词的起始字母位置,d为结束位置。
    i++;
    }
}

我只是修改了longest函数中第二个while的条件,问题就解决了,我不明白,对于一句字符串中((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))这个条件和a[i]!=' '这个条件有什么不同,然后对运行结果造成了那么大的影响。至于2楼所说的我都程序错误很多,我觉得自己的算法应该没问题。有错误的地方还劳烦指出哦……
2008-11-29 09:29
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
程序代码:
int max =0;//保存最长的数值
int pos = 0;//保存该单词的尾点
for(int i = 0 ; str[i]!='\0';i++)
{
    int j = 0;
    while(str[i]!='\0'&&str[i]!=' ')
    {
        j++;
        i++;
    }
    if(j>max)
    {
        max = j ;
        pos = i;
    }
}
for(int i = 0 ; i<max;i++)
{
    printf("%c",str[pos-max+i]);
}


倚天照海花无数,流水高山心自知。
2008-11-29 12:46
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
呵呵,学了一手。
2008-11-29 17:14
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 第4楼 songsfly 的帖子
如果输入:abcd,defg,love ,您看输出的是哪个最大的?

PS:我的程序错误也许更多,如果输入 abcd,degf,abcde,应该是全部输出了。呵~

[[it] 本帖最后由 广陵绝唱 于 2008-11-29 18:08 编辑 [/it]]
2008-11-29 18:01
yu8697593
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-21
收藏
得分:0 
#include<stdio.h>
#include <stdlib.h>
void longest(char a[]);
int d,c,n;
void main()
{
    char a[1000];
    memset(a,'\0',1000);//初始化数组。
   
    printf("请用英文输入一句话\n");
    gets(a);
    
    longest(a);
    
    for(;c<d;c++)
        printf("%c",a[c]);
    printf("\n");
}


void longest(char a[])
{
    int i=0,max=0;
    while(a[i]!='\0')
    {  
        n=0;
        while(a[i]!=' ')
        {   
            if (a[i]=='\0')//当a[i]为‘\0’的时候跳出循环。
            {
                break;
            }    
            n++;
            i++;    
            
        }
        if(n>max){max=n;d=i;c=d-max;}//c为最长单词的起始字母位置,d为结束位置。
        i++;
    }
    
}
这样对了,最好初始化一下数组
2008-11-30 12:42
快速回复:字符串中的最长单词
数据加载中...
 
   



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

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