C语言题目一道!!求救,,!!(答得如果特满意,让我特有收获,追加之)

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:46:40
题目如下:
函数ReadDat()实现从文件ENG.IN中读取一篇英文文章存入到字符串数组xx中;请编制函数DelWord()分别按行删除空格、标点符号以及10个不区分大小写的英文单词(you,for,your,on,no,if,the,in,to,all),余下的单词倒置后按顺序重新存入数组xx中,最后调用函数WriteDat()把结果xx输出到文件PS7.OUT中。
例如:原文:You are a student.
结果:eraatneduts
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
注意: 部分源程序存放在文件prog1.c中。文章每行中的单词与单词之间用空格或其它标点符号分隔,每单词均小于20个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
然后我写的程序如下,为什么运行不了啦!!???(注:maxline在之前已定义)
void DelWord(void)
{
int i,j,k,a,b,d,n,maxletter;
char word[20],str[80];
char c;
memset(word,0,20*sizeof(char));
for(i=0;i<maxline;i++)
{
a=0;
maxletter=strlen(xx[i]);
for(j=0;j<maxletter;j++)
{
c=xx[i][j];
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
word[n++]=xx[i][j];
}
else
{
word[n]='\0';
d=0;
for(k

n没有初始化

我说的初始化不光是i的循环开始,还有你每次把一个单词转置写入str后,n也要重新置为0啊.不然的话,写几个单词后,n就超过20了,b=n后word[--b]不就越界了么.要在
if(d==0)
{
for(b=n-1;b>=0;b--,a++)
str[a]=word[b];
}
后加上n=0;

而且
for(;a<n;a++)
str[a]=word[--b];
这个循环也不行,要以b为循环变量.a是str中的下标,n是word中的下标,两者怎么能比较.要改成
for(b=n-1;b>=0;b--,a++)
str[a]=word[b];

for(j=0;j<maxletter;j++)也不行,这样每次读到一行字符串结束时,直接就结束循环了,没有把最后一个单词写到str中.要改成
for(j=0;j<=maxletter;j++)

每次把变化后的字符串写入xx[i]前,忘了给str加结束符了.要加上str[a]='\0';

正确代码如下:
void DelWord(void)
{
int i,j,k,a,b,d,n,maxletter;
char word[20];
char str[80];
char c;
memset(word,0,20*sizeof(char));
for(i=0;i<maxline;i++)
{
a=0;
n=0;
maxletter=strlen(xx[i]);
for(j=0;j<=maxletter;j++)
{
c=xx[i][j];
if((c>='a'&&c<='z')||(c>='A'&&c<='