| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 839 人关注过本帖
标题:求助:输入一串字符串中的最长单词 出错了
取消只看楼主 加入收藏
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:4 
求助:输入一串字符串中的最长单词 出错了
#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: 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
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
收藏
得分:0 
回复 10楼 雪狼MJ
10楼的程序调试出错 百度了下然后给修改了 理解时顺手加了注释 给了我用指针的灵感 谢啦!!!!
以下为修改完 成功运行的程序:
程序代码:
#include<stdio.h>
#include<string.h>
#define bool int        //c不支持bool,想使用必须定义以下三行的宏
#define true 1
#define false 0

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;
    int i;
    bool Inti=false;       
    bool L_start;
    bool M_start;
    int result;
    for(i=0;(x[i])!='\0';i++)  //在for里 int i会报错
    {
        //始化,将第一个遇到的字母记录
        if((!Inti) && num(x[i]))  //!inti第一次为true执行
        {
            k=1;
            l=i;
            L_start=true;
            Inti=true;        //之后为false不执行
        }
      
        if(num(x[i]))
        {
            if(L_start) k++;    //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<m
                {
                    k=0;    //k清零
                    l=i+1;    //l重新记录下一个单词首字母位置
                }
                if(M_start)    // k>=m
                {
                    m=0;    // m清零
                    n=i+1;     //n重新记录下一个单词首字母位置
                }
            }
        }
        (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;
}

2013-06-17 18:32
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
收藏
得分:0 
回复 11楼 赵疯子
(⊙o⊙)… 我还真是以为是字符数组了。。。 再好好研究下 谢啦!
2013-06-17 18:36
无凉
Rank: 1
等 级:新手上路
帖 子:16
专家分:2
注 册:2013-5-6
收藏
得分:0 
回复 11楼 赵疯子
(⊙o⊙)…我还真是以为是字符数组了 不过不然是什么呢。。。。-_-|| 我再研究下 谢啦!!
2013-06-17 18:37
快速回复:求助:输入一串字符串中的最长单词 出错了
数据加载中...
 
   



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

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