免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1370 | 回复: 6
打印 上一主题 下一主题

[函数] 那位帮忙完成个小函数?(计算机三级) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-04 16:04 |只看该作者 |倒序浏览
内容如下:

函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,并调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。
如原文为 :You He Me
I am a student.
则结果为: Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
{注意}部分源程序存放在PROG1.C中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。


#include <stdio.h>;
#include <string.h>;
#include <conio.h>;

char xx[50][80];
int maxline=0; /*文章的总行数*/

int ReadDat(void);
void WriteDat(void);


void StrOL(void)
{完善此程序}

void main()
{clrscr();
if(ReadDat()){
printf("数据文件IN.DAT不能打开! \n\007";
return:
}
SrtOL();
WriteDat();
}

int ReadDat(void)
{FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN.DAT","r")==NULL)return 1;
while(! fgets(xx,80,fp)!=NUll){
p=strchr(xx,'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
clrscr();
fp=fopen("OUT6.DAT","w";
for(i=0;i<maxline;i++){
printf("%s \n",xx);
fprintf(fp,"%s \n",xx);
}
fclose(fp);
}



首先申明,我不是不劳而获,我也写了这个函数可是编译时没有通过,我是没有办法才问的。那位能不用库函数完成这个任务,顺便说一下思路,要是没时间写代码也请说一下思路,先谢了。不知说清了没有?(急用,因4月份就考试)

论坛徽章:
0
2 [报告]
发表于 2004-03-05 12:27 |只看该作者

那位帮忙完成个小函数?(计算机三级)

真的很难吗?

论坛徽章:
0
3 [报告]
发表于 2004-03-05 19:47 |只看该作者

那位帮忙完成个小函数?(计算机三级)

我就不信没人回!

论坛徽章:
0
4 [报告]
发表于 2004-03-05 21:22 |只看该作者

那位帮忙完成个小函数?(计算机三级)

转换一行的脚本已经写好了,转换全部数组只要循环调用该函数就可以了
方法有些笨

  1. void CovertALine(char* szString)
  2. {
  3.         char szBuf[80];
  4.         char strWord[80+1];
  5.         int nWordLen;
  6.         strWord[80] = '\0';

  7.         char *p1,*tail;
  8.         char *pBuf = szBuf;

  9.         int nLineLen = 0;
  10.         tail = szString;
  11.         while(*tail != '\0')
  12.         {
  13.                 tail++;
  14.                 nLineLen ++;
  15.         }
  16.         tail--;
  17.         p1 = tail;
  18.         nWordLen = 0;

  19.         int i;
  20.         for(i = 0; i < nLineLen ;i++)
  21.         {
  22.                 if( (*p1 >;= '0' && *p1 <= '9') || (*p1 >;= 'A' && *p1<='Z') || (*p1 >;= 'a' && *p1 <= 'z') )
  23.                 {
  24.                         strWord[79-nWordLen] = *p1;
  25.                         nWordLen++;
  26.                 }
  27.                 else
  28.                 {
  29.                         char *pStart = strWord + 80 - nWordLen;
  30.                         strcpy(pBuf,pStart);
  31.                         pBuf += nWordLen;
  32.                         *pBuf = *p1;
  33.                         pBuf ++ ;
  34.                         nWordLen = 0;
  35.                 }
  36.                 p1--;
  37.         }

  38.         if(nWordLen != 0)
  39.         {
  40.                 char *pStart = strWord + 80 - nWordLen;
  41.                 strcpy(pBuf,pStart);
  42.                 pBuf += nWordLen;
  43.         }
  44.         *pBuf = '\0';
  45.         printf("%s\n",szBuf);
  46. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2004-03-05 22:37 |只看该作者

那位帮忙完成个小函数?(计算机三级)


  1. void StrOL(void){
  2.         int i, j,n;
  3.         char tmp, c = 0;

  4.         for ( i == 0; i < maxline, i++ ){
  5.                 n = strrchr( xx[i], c ) - xx[i];//每行字狐数
  6.                 for ( j == 0; j < (n+1)/2; j++ ){//字狐交换
  7.                         tmp = xx[i][j];
  8.                         xx[i][j] = xx[i][n-j];
  9.                         xx[i][n-j] = tmp;
  10.                 }
  11.         }
  12. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2004-03-06 06:14 |只看该作者

那位帮忙完成个小函数?(计算机三级)

一个想法,建一个临时数组,50乘80的,然后逐个读入字符,使用一个变量控制字符串的确定,然后把字符串存到临时数组,然后想怎样处理随你了,没有使用任何库函数,速度也不慢,最重要一点,没有溢出错误。

论坛徽章:
0
7 [报告]
发表于 2004-03-06 19:26 |只看该作者

那位帮忙完成个小函数?(计算机三级)

谢谢大家。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP