t[0]=t1[0]='\\0'; k=1; while(k) {
while(isalpha(*p1)==0&&p1!=xx[i]) {p1--;p2=p1;} while(isalpha(*p1)&&p1>=xx[i]) p1--; memcpy(t1,p1+1,p2-p1); t1[p2-p1]=0; strcat(t,t1); strcat(t,\
if(p1 strcpy(xx[i],t); } } 原程序如下: # include\ # include\ # include\ char xx[50][80]; int maxline=0; int ReadDat(void); void WriteDat(void); void StrOR(void) { } void main() {clrscr(); if(ReadDat()) {printf(\ return;} StrOR(); WriteDat(); system(\ } int ReadDat(void) {FILE *fp;int i=0;char *p; if((fp=fopen(\ 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; fp=fopen(\ for(i=0;i fclose(fp); } 4:函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中; 请编制函数StrOL( ), 其函数的功能是: 以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。 例如: 原文: You He Me I am a student. 结果: Me He You student a am I 原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格。 ------------类型:字符串(单词)的倒置和删除。 void StrOL(void) /*标准答案*/ {int I,j,k,strl,l;char c; for(I=0;I if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' ') ; else xx[I][j]=' '; } for(l=0;l {char ch[80]={0}; char pp[80]={0}; strl=strlen(xx[l]); I=strl-1; k=1; while(1) {while (((xx[l][I]>='a'&&xx[l][I]<='z')||(xx[l][I]>='A'&&xx[l][I]<='z'))&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++;I--; } strcat(ch,pp);strcpy(pp, \ if(I==-1)break; while((xx[l][I]<'A'||xx[l][I]>'z')&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++; I--;} strcat(ch,pp); strcpy(pp,\ k=0; if(I==-1)break;} strcpy(xx[l],ch); }} 或者: void StrOL(void) { int i,j,k,m,n,ll; char yy[80]; for(i=0; i < maxline; i++) { ll=strlen(xx[i]); k=n=0; for(j=ll-1; j>=0; j--) { if(isalpha(xx[i][j])) k++; else { for(m=1; m<=k; m++) yy[n++]=xx[i][j+m]; k=0; } if(xx[i][j]==' ') yy[n++]=' '; } for(m=1; m<=k; m++) yy[n++]=xx[i][j+m]; yy[n]=0; strcpy(xx[i],yy); } } 原程序如下: # include\ # include\ # include\ # include\ char xx[50][80]; int maxline=0; int ReadDat(void); void WriteDat(void); void StrOR(void) { } void main() {clrscr(); if(ReadDat()) {printf(\ return;} StrOR(); WriteDat(); system(\ } int ReadDat(void) {FILE *fp;int i=0;char *p; if((fp=fopen(\ 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; fp=fopen(\ for(i=0;i fclose(fp); } 5:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200 个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小 进行升序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则 按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。 例:处理前 6012 5099 9012 7025 8088 处理后 9012 6012 7025 8088 5099 注意:部分源程序已给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 void jsSort() /*标准答案*/ {int I,j,data; for(I=0;I<199;I++) for(j=I+1;j<200;j++) {if (aa[I]00>aa[j]00) {data=aa[I];aa[I]=aa[j];aa[j]=data;} else if(aa[I]00==aa[j]00) if(aa[I] {data=aa[I];aa[I]=aa[j];aa[j]=data;} } for(I=0;I<10;I++) bb[I]=aa[I]; } 原程序如下: #include void jsSort() { } void main() {readDat(); jsSort(); writeDat(); system(\ } readDat() {FILE *in; int i; in=fopen(\ for(i=0; i<200; i++) fscanf(in,\ fclose(in); } writeDat() {FILE *out; int i; clrscr(); out=fopen(\ for(i=0; i<10; i++){ printf(\ fprintf(out,\ } fclose(out); } 6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200 个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小 进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则 按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。 例:处理前 9012 5099 6012 7025 8088 处理后 5099 8088 7025 6012 9012 注意:部分源程序已给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 void jsSort() /*标准答案*/