| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 542 人关注过本帖
标题:一个非常非常不可思议的问题
收藏  订阅  推荐  打印
stephen250
Rank: 1
等级:新手上路
帖子:28
积分:408
注册:2008-6-9
一个非常非常不可思议的问题

今天做了一道计算机三级的题目,如下:

函数ReadDat()的功能是实现从文件IN012.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT012.DAT中。
例如,原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意:部分源程序已给出。
请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。
试题程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <memory.h>
char xx[50][80] ;
int maxline = 0 ;/* 文章的总行数 */
int   ReadDat(void) ;
void  WriteDat(void) ;
void StrOL(void)
{

}
void main()
{
system("CLS");
if (ReadDat ())
    {
     printf("数据文件 IN012.DAT不能打开!\n\007") ;
     return ;
    }
StrOL() ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
char *p;
if((fp = fopen("IN012.DAT", "r")) == NULL) return 1 ;
while(fgets(xx[i], 80, fp) != NULL)
      {
       p = strchr(xx [i], '\n') ;
       if(p) *p = 0 ;
       i++ ;
      }
maxline = i ;
fclose(fp) ;
return 0 ;
}
void WriteDat(void)
{
FILE*fp ;
int i ;
system("CLS");
fp = fopen("OUT012.DAT", "w") ;
for(i = 0 ; i < maxline ; i++)
    {
     printf("%s\n", xx[i]) ;
     fprintf(fp, "%s\n", xx[i]) ;
    }
fclose(fp) ;
}

我的函数内容是这样的:
void StrOL(void)
{
    int n1;
    int len;
    char *p1,*p2;
    char t1[80],t2[80];
    for(n1=0;n1<maxline;n1++)
    {
        len=strlen(xx[n1]);
        t1[0]=t2[0]='\0';
        p1=&xx[n1][len-1];
        p2=&xx[n1][len-1];
        while(1)
        {
        while(isalpha(*p1)==0)
            p1--;
        p2=p1;
        while(isalpha(*p1))
            p1--;
        memcpy(t2,p1+1,p2-p1);
        t2[p2-p1]='\0';
        strcat(t1,t2);
        strcat(t1," ");
        if(p1-&xx[n1]<0)
            break;
        }
        strcpy(xx[n1],t1);
    }
}

编译运行都正确,但是结果却是很诡异的错误:

第四行竟然多出了一个which,其他的结果却都是正确的,请各位高说指点一下!
附件: 只有本站会员才能下载或查看附件,请您 登录注册
2008-8-4 16:54
stephen250
Rank: 1
等级:新手上路
帖子:28
积分:408
注册:2008-6-9

自己顶,我就不信没有高人能够帮我。
2008-8-5 10:32
lingluoz
Rank: 4
等级:高级会员
帖子:613
积分:6578
威望:3
来自:苏州科技学院
注册:2008-2-2

你应该自己学会调试 自己解决 不要遇见什么问题就请教高手
如果实在不行 再发过来 不要过分依赖别人

MAY 1, 1964 -- The Birth of BASIC
Over 40 years later, it still enables ANYONE to write their own programs.
P.S. 革命尚未成功 同志仍需努力
2008-8-5 10:35
stephen250
Rank: 1
等级:新手上路
帖子:28
积分:408
注册:2008-6-9

引用:
lingluoz 在 2008-8-5 10:35 的发言:

你应该自己学会调试 自己解决 不要遇见什么问题就请教高手
如果实在不行 再发过来 不要过分依赖别人
我觉得LS还是自己做一下这个题目吧,我已经研究了一天,你如果不愿意做,那就不要随便批评我。
2008-8-5 13:42
爱喝牛奶的猫咪
Rank: 2
等级:ID已被封
帖子:514
积分:5824
来自:QQ群46520219
注册:2008-6-16

这种题目我觉得对于3楼只是水题。

从源码可以看出LZ根本不会使用栈


[color=white]<>

[ 本帖最后由 爱喝牛奶的猫咪 于 2008-8-5 13:54 编辑 ]
2008-8-5 13:52
StarWing83
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:2476
积分:26129
威望:9
来自:湖北工业大学
注册:2007-11-16

其实用不着用栈
用指针也比较简单~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-8-5 14:23
w362034710
Rank: 2
等级:注册会员
帖子:169
积分:1818
注册:2006-12-2

第四行开头有个“,属于非字母,你的程序没有处理这种情况。。
2008-8-5 14:31
崔园园
Rank: 2
等级:注册会员
帖子:54
积分:610
注册:2008-4-21

p1-&xx[n1]<0这里的xx[n1]本身算作是一个地址,而你又取了一次地址,p1是一个一级指针,应该不能直接相减吧。
2008-8-5 16:15
stephen250
Rank: 1
等级:新手上路
帖子:28
积分:408
注册:2008-6-9
回复 8# 崔园园 的帖子

那是个笔误,事实上改过来了以后依然是那个错误。
2008-8-5 18:39
卧龙孔明
Rank: 12Rank: 12Rank: 12
等级:版主
帖子:3692
积分:38938
威望:47
注册:2006-10-13

这个题,好像在哪个oj见过。

usaco?

为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!
2008-8-6 09:17
共有 541 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.052514 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved