艾尔顿 约翰 王牌特工:C语言的问题,回答后追加50分

来源:百度文库 编辑:高考问答 时间:2024/04/28 13:12:15
由于要叙述的内容比较长,这里装不下,请到下面的链接来看,问题回答在百度知道里,结贴之后追加50分!谢谢!
http://www.programfan.com/club/showbbs.asp?id=176753
这个程序还是存在问题,实在找不出原因!
我们提交程序有个判别正误的系统,系统提供五组测试数据,这个程序只通过了四组,说明程序针对这个题目还是有错误,某处也许考虑欠缺!谢谢大家哈!

你程序的输出没有什么问题啊,跟样例的结果是完全一样的

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#define MAX 21
struct word * add(struct word * r,char * w,int line);
char * copy(char * w);
void tprint(struct word * r);
int getword(char * w);
struct word{
char * word;
int line[50];
int nline;
struct word * left;
struct word * right;
} * root;
char word[MAX];
char sign[]={'.',',','!','?',':',';'};
char * art[]={"a","an","and","the","A","An","And","The"};

int main ()
{
int c,i,j,line=1;
int key,key1,key2;
while(c!=EOF)
{
key=0;key1=1;key2=0;
c=getword(word);
for(i=0;word[i]!='\0';i++); /*字符传长度*/
for(j=i-2;j>=0;j--)/*检查除末字符外的其他字符*/
if(!isalpha(word[j])&&word[j]!='-'){
key1=0;break;
}
if(key1){
if(isalpha(word[--i]))
key2=1;
else{
for(j=0;j<6;j++)/*判断最后一个是否为有效符号*/
if(word[i]==sign[j]){
key2=1;
word[i]='\0';
break;
}
}
if(key2)/*检查该词是否为忽略词*/
for(j=0,key=1;j<8;j++)
if(!strcmp(word,art[j])){
key=0;break;
}
}
if(key)
root=add(root,word,line);
if(c=='\n')
line++;
}
tprint(root);
return 0;
}
struct word * add(struct word * r,char * w,int line)
{
int u;
if(r==NULL){
r=(struct word * )malloc(sizeof(struct word));
r->word=copy(w);
r->line[0]=line;
r->nline=1;
r->left=r->right=NULL;
}
else if((u=strcmp(r->word,w))>0)
r->left=add(r->left,w,line);
else if(u<0)
r->right=add(r->right,w,line);
else if(r->line[r->nline-1]!=line){
r->line[r->nline]=line;
r->nline++;
}
return r;
}
char * copy(char * w)
{
char * p;
p=(char *)malloc(strlen(w)+1);
strcpy(p,w);
return p;
}
void tprint(struct word * r)
{
int i;
if(r!=NULL){
tprint(r->left);
printf("%s:",r->word);
for(i=0;i<r->nline;i++)
printf(i==(r->nline-1)?"%d\n":"%d,",r->line[i]);
tprint(r->right);
}
}
int getword(char * w)
{
int c;
char * p=w;
while((c=getchar())!=' '&&c!='\n'&&c!=EOF)
*p++=c;
*p='\0';
return c;
}
掉了几个分号,其它的都没有什么问题
ps:请细心一点