| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:求助:输入一串字符串中的最长单词 出错了
只看楼主 加入收藏
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:14 
求助:输入一串字符串中的最长单词 出错了
#include<stdio.h>
#include<string.h>
int main()
{   
    int longest(char x[]);
    int num(char);
    char a[50];
    int    i;
    printf("putin line:\n");
    gets(a);
    printf("the longest word is:\n");
    i= longest(a);
    for(;num(a[i])==1;i++)
    {
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}
int longest(char x[])
{
    int num(char);
    int i=0,l=0,k=0;
    char *p1, *p2;
    p2=x;
    p1=x;
    for(i=0;(x[i])!='\0';i++)
    {
        if(num(x[i]))
        {
            if(num(x[i-1]))
            {
                p2=&x[i];
            }
            else
            {
                p1=&x[i];
            }
        }
        else
        {
            if(l<p2-p1)
            {
                l=p2-p1;
                k=i;
            }
        }
    }
    k=k-l/4;
    return k;
}
int num(char a)
{
    if ((a>='a')&&(a<='z')||(a>='A')&&(a<='Z'))   
    {
        return 1;
    }
    else return 0;
}

不明白到底哪里出错了 是不是思路有问题?为什么输出的总是第一个单词的最后一个字母呢。。。
搜索更多相关主题的帖子: include return 字符串 单词 
2013-06-15 23:02
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:0 
明天再问吧 都歇息了
2013-06-15 23:10
末明黑夜
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2013-6-13
收藏
得分:1 
你对指针的理解错了
你的p1和p2在后移的时候,是一个字符一个字符后移的,直到你的X[i]=='/0'为止,此时你的p[i]指向的就是你的第一个单词的最后一个字符了
而且
你的指正也根本没有办法移动到下一个单词啊,遇到'\0'后你的就需找最大的单词就停了
你试试用排序的方法
2013-06-16 00:15
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:1 
for(;num(a[i])==1;i++)
    {
        printf("%c",a[i]);
    }
感觉这里有问题!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-16 00:18
末明黑夜
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2013-6-13
收藏
得分:0 
额。。我错了,可以移动到最后一位····
2013-06-16 00:21
末明黑夜
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2013-6-13
收藏
得分:0 
回复 4楼 我叫沃恩
不是那里的问题。。。
2013-06-16 00:22
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
回复 6楼 末明黑夜
哦,我再看看!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-16 00:26
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
收藏
得分:1 
#include<stdio.h>
#include<string.h>
int main()
{   
    int longest(char x[]);
    int num(char);
    char a[50];
    int    i;
    printf("putin line:\n");
    gets(a);
    printf("the longest word is:\n");
    i= longest(a);
    for(;num(a[i])==1;i++)
    {
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}
int longest(char x[])
{
    int num(char);
    int i=0,l=0,k=0;
    char *p1, *p2;
    p2=x;
    p1=x;
    for(i=0;(x[i])!='\0';i++)
    {
        if(num(x[i]))
        {
            if(num(x[i-1]))
            {
                p2=&x[i];
            }
            else
            {
                p1=&x[i];
            }
        }
        else
        {
            if(l<p2-p1)
            {
                l=p2-p1+1;
                k=i;
            }
        }
    }
    k=k-l;
    return k;
}
int num(char a)
{
    if ((a>='a')&&(a<='z')||(a>='A')&&(a<='Z'))   
    {
        return 1;
    }
    else return 0;
}
你再试试
2013-06-16 10:35
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
收藏
得分:0 
回复 8楼 hsjjgm
还是不行 而且k是记录最长单词最后一个字母a[i]在数组中的位置i的 k=k-1 完全没有意义  l=p2-p1 是地址的距离 l/4(字节)才是字母在数组中相差的距离
l=p2-p1 同理 再减1没有意义
2013-06-16 14:28
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:4 
我换了一种思路,不用指针,用单个的状态标志:
程序代码:
#include<stdio.h>
#include<string.h>

int longest(char x[]);
int num(char);

int main()
{   
   
    char a[50];
    int    i;
    printf("putin line:\n");
    gets(a);
    printf("the longest word is:\n");
    i= longest(a);
   
    for(;num(a[i])==1;i++)
    {
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}

int longest(char x[])
{
    int k=0;
    int l=0;
    int m=0;
    int n=0;
    bool Inti=false;
    bool L_start;
    bool M_start;
   
    int result;
   
    for(int i=0;(x[i])!='\0';i++)
    {
        //初始化,将第一个遇到的字母记录
        if((!Inti) && num(x[i]))
        {
            k=1;
            l=i;
            L_start=true;
            Inti=true;
        }
       
        if(num(x[i]))
        {
            if(L_start) k++;
            if(M_start) m++;
        }
        else
        {
            if(k<m)
            {
                L_start=true;
                M_start=false;
            }
            else
            {
                L_start=false;
                M_start=true;
            }
           
            if(num(x[i+1]))
            {
                if(L_start)
                {
                    k=0;
                    l=i+1;
                }
                if(M_start)
                {
                    m=0;
                    n=i+1;
                }
            }
        }
        (k>m)?(result=l):(result=n);
    }
    return result;
}
int num(char a)
{
    if ((a>='a')&&(a<='z')||(a>='A')&&(a<='Z'))   
    {
        return 1;
    }
    else return 0;
}


 

Edsger Dijkstra:算法+数据结构=程序
2013-06-16 16:11
快速回复:求助:输入一串字符串中的最长单词 出错了
数据加载中...
 
   



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

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