| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1658 人关注过本帖
标题:一个非常非常不可思议的问题
只看楼主 加入收藏
stephen250
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-6-9
收藏
 问题点数:0 回复次数:11 
一个非常非常不可思议的问题
今天做了一道计算机三级的题目,如下:

函数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,其他的结果却都是正确的,请各位高说指点一下!

00000000.rar (30.17 KB)
搜索更多相关主题的帖子: 函数 计算机 include 不可思议 标点符号 
2008-08-04 16:54
stephen250
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-6-9
收藏
得分:0 
自己顶,我就不信没有高人能够帮我。
2008-08-05 10:32
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
你应该自己学会调试 自己解决 不要遇见什么问题就请教高手
如果实在不行 再发过来 不要过分依赖别人

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-08-05 10:35
stephen250
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-6-9
收藏
得分:0 
[bo][un]lingluoz[/un] 在 2008-8-5 10:35 的发言:[/bo]

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


我觉得LS还是自己做一下这个题目吧,我已经研究了一天,你如果不愿意做,那就不要随便批评我。
2008-08-05 13:42
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
这种题目我觉得对于3楼只是水题。

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


[color=white]<" border="0" />>

[[it] 本帖最后由 爱喝牛奶的猫咪 于 2008-8-5 13:54 编辑 [/it]]
2008-08-05 13:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
其实用不着用栈
用指针也比较简单~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-08-05 14:23
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
第四行开头有个“,属于非字母,你的程序没有处理这种情况。。
2008-08-05 14:31
崔园园
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2008-4-21
收藏
得分:0 
p1-&xx[n1]<0这里的xx[n1]本身算作是一个地址,而你又取了一次地址,p1是一个一级指针,应该不能直接相减吧。
2008-08-05 16:15
stephen250
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-6-9
收藏
得分:0 
回复 8# 崔园园 的帖子
那是个笔误,事实上改过来了以后依然是那个错误。
2008-08-05 18:39
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
这个题,好像在哪个oj见过。

usaco?

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-08-06 09:17
快速回复:一个非常非常不可思议的问题
数据加载中...
 
   



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

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