题目3:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT.DAT中.
例如:原文:You can create an index on any field.
you have the correct record.
结果: n any field.You can create an index
rd.yu have the crrect rec
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.
-------------------
类型:字符串(单词)的倒置和删除。
答案:
void StrOR(void) /*标准答案*/
{int I,j,k,index,strl;
char ch;
for(I=0;I<maxline;I++)
{strl=strlen(xx[I]);
index=strl;
for(j=0;j<strl;j++)
if(xx[I][j]=='o')
{for(k=j;k<strl-1;k++)
xx[I][k]=xx[I][k+1];
xx[I][strl-1]= ' ';
index=j;}
for(j=strl-1;j>=index;j--)
{ch=xx[I][strl-1];
for(k=strl-1;k>0;k--)
xx[I][k]=xx[I][k-1];
xx[I][0]=ch;}
}
}
或者:
void StrOR(void)
{ int i;
char a[80],*p;
for(i=0;i<maxline;i++)
{ p=strchr(xx[i],'o');
while(p)
{ memset(a,0,80);
memcpy(a,xx[i],p-xx[i]);
strcpy(xx[i],p+1);
strcat(xx[i],a);
p=strchr(xx[i],'o'); } }
}
或者:
void StrOR(void) /*我的非指针解法*/
{int i,righto,j,k;
char tem[80];
for(i=0;i<maxline;i++)
{k=0;righto=0;memset(tem,0,80);
for(j=strlen(xx[i])-1;j>=0;j--)
{if(xx[i][j]=='o') {righto=j;break;} }
for(j=righto+1;j<strlen(xx[i]);j++) tem[k++]=xx[i][j];
for(j=0;j<righto;j++)
{if(xx[i][j]!='o') tem[k++]=xx[i][j];}
strcpy(xx[i],tem);
}}
或者:
注:题目要求的字符串中所有小写字母o左边的字符串内容移到该串的右边存放,即
将串中“最后”一个字母o左右两侧的内容互换。题中第一个while()特环的作用是让p1
指向最后一个字母'o'。第一个ctrcat()函数的作用是将p1以后的字符都放到新串t中
,第二个strcat()函数的作用是将p1以前的字符连接到新串t的后面(注意:在些之前要
让p1所指的单元成为p1前面字符串的结束位置*p1='\0')。这时完成左右互换。最后
一个while()循环的作用是删除新串中的所有小写字母'o',采用的删除方法是不是'
o'的字母一律留下,否则不留(即相当于删除。)
void StrOR(void)
{int i;
char *p1,*p2,t[80];
for(i=0;i<maxline;i++)
{t[0]='\0';p2=xx[i];
while(*p2)
{if(*p2=='o') p1=p2;
p2++;}
strcat(t,p1+1);
*p1='\0';strcat(t,xx[i]);
p1=xx[i];p2=t;
while(*p2)
{if(*p2!='o') *p1++=*p2;
p2++;
}
*p1='\0';
}}
或者:
注:该题的主要算法是先让两字符指针都指向串尾,然后使一指针(p1)往前移动,当
出现不是字母时则表示在p1+1与p2之间是一个单词,并将该单词存入一变量(t1),最后
将t1连接到新串中(t);接着再往前找第二个单词,依次类推直到字符串头。由此可知
新串就是原串中各单词的倒排。
void Str0L(void)
{
int i,k;
char *p1,*p2;
char t[80],t1[80];
for(i=0;i<maxline;i++)
{p2=p1=strchr(xx[i],'\0')-'\0';
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<xx[i]) k=0;
}
strcpy(xx[i],t);
}
}
计算机三级网络技术 南开上机100题
4星 · 超过85%的资源 需积分: 0 44 浏览量
更新于2009-09-07
收藏 77KB RAR 举报
计算机三级里面网络技术考的人最多也最好过,非专业的同学来考考,含金量与同级的其他类别一样的。
xssbobo
- 粉丝: 0
- 资源: 9
最新资源
- 年终奖雷区测试及注意说明.xls
- 谨防年终奖发放的“雷区”.xls
- 年终奖发放税筹、技巧及注意事项.pptx
- 六种薪酬模式下销售员工的年终奖发放策略(技巧篇).doc
- 员工年终奖分配方案(规范行政文件).doc
- 2016年终奖税率表(清晰一览表).docx
- 个税最佳配置表-月薪及年终奖.XLS
- 【化工行业】化学原料及成品制造业年终奖金制度.doc
- 【制造行业】绩效奖金、年终奖金发放办法(通用模板).docx
- 高管层年终奖避税测算表(含各税点测算).xlsx
- 工资年终奖调节试算表(模板).xls
- (3500)年终奖个税自动计算表.xls
- 一次性年终奖审批及发放明细表.xls
- 年终奖、年薪差个人所得税筹划方案测算表.xls
- 绩效奖金发放表(模板样式).xls
- 税前税后工资VS年终奖计算表(灵活-简单).xlsx