| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 634 人关注过本帖
标题:最长单词输出,提示应用程序错误,大侠们帮我看看啊!多谢了!
只看楼主 加入收藏
ybjkl
Rank: 2
等 级:论坛游民
帖 子:86
专家分:85
注 册:2011-6-21
收藏
得分:0 
  高手都在忙啥呢?真的期待在原有思路和框架上看到指针数组的牛B运用,也好让我这菜鸟开开眼啊!
  问题的关键是在一个字符串中有并列最长单词的时候都能输出,为简单起见,字符串以.结束,也算是有标点吧!省去最长单词在最后面的情况。在线等。高手拜托啦!
2011-08-30 14:53
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:15 
根据楼主的算法,下面这个程序输入的字符串最后必须带上标点符号或非字母字符。同样,我运行了上面你写的输出一个单词的程序,如果输入字符串不加标点则结果也可能出错,比如输入:i am a boy输出就是错误的

程序代码:
#include<stdio.h>
void fun1(char *p);
void fun2(char *p);
int alphabet(char c);
char *a[100]={NULL};
char *temp;
int i=0;
int first_max;
int main()
{

    int j=0;
    char str[1000];
    printf("input the string:\n");
    gets(str);
    temp=(char*)str;
    fun1(temp);
    while(temp&&*(temp+1)!='\0')
    {
        fun2(temp);
    }
    if(*a[0]==NULL)
        printf("the string is null!\n");
    else
    {
        printf("the longest word is :\n");
        while(a[j])
        {
            while(alphabet(*a[j]))
            {
                printf("%c",*a[j]);
                a[j]++;
            }
            j++;
            printf("\n");
        }
    }
    return 0;
}

int alphabet(char c)

{
    if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
        return 1; 
    else
        return 0;
}

void fun1(char *p)//找到第一个最长的字符,并把他的长度记录在first_max全局变量中
{
    
    int max=0;
    int count=0;
    int flag=1;
    char *point1=NULL,*point2;
    while(*p!='\0')
    {
        if(alphabet(*p))
        {
            count++;
            flag=0;
        }
        else 
        {
            flag=1;
        }
        if(flag)
        {
            if(count>max)
            {
                max=count;
                point2=p;
                point1=p-max;
                count=0;
            }
            else 
            {
                count=0;
            }
        }
        p++;
    }
    a[i++]=point1;
    temp=point2;
    first_max=max;
}
void fun2(char *p)
{
    int max=0;
    int count=0;
    int flag=1;
    char *point1=NULL,*point2=NULL;
    while(*p!='\0')
    {
        if(alphabet(*p))
        {
            count++;
            flag=0;
        }
        else 
        {
            flag=1;
        }
        if(flag)
        {
            if(count>max&&count==first_max)
            {
                max=count;
                point2=p;
                point1=p-max;
                count=0;
            }
            else 
                count=0;
        }
        p++;
    }
    a[i++]=point1;
    temp=point2;

}

A real warrior never quits.
2011-08-30 18:31
快速回复:最长单词输出,提示应用程序错误,大侠们帮我看看啊!多谢了!
数据加载中...
 
   



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

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