题目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);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
三级网络技术南开一百题
共300个文件
txt:200个
c:99个
rar:1个
需积分: 0 193 下载量 49 浏览量
2009-03-14
14:09:37
上传
评论 4
收藏 260KB RAR 举报
温馨提示
南开一百题 有.C格式,.txt格式 并已经做好分类
资源详情
资源评论
资源推荐
收起资源包目录
三级网络技术南开一百题 (300个子文件)
61.C 893B
53.C 721B
54.C 640B
89.C 638B
57.C 599B
74.C 555B
34.C 517B
67.C 503B
1.C 481B
13.C 467B
76.C 464B
80.C 461B
46.C 460B
18.C 453B
42.C 450B
22.C 445B
12.C 444B
39.C 440B
11.C 440B
50.C 438B
24.C 437B
14.C 434B
79.C 418B
55.C 416B
40.C 415B
4.C 413B
86.C 411B
75.C 407B
43.C 401B
37.C 395B
73.C 380B
51.C 379B
20.C 377B
56.C 375B
30.C 374B
6.C 371B
41.C 365B
85.C 359B
33.C 358B
99.C 357B
28.C 356B
59.C 348B
95.C 346B
93.C 341B
9.C 340B
25.C 327B
60.C 318B
5.C 316B
27.C 315B
2.C 314B
96.C 314B
26.C 313B
44.C 310B
98.C 302B
15.C 292B
3.C 292B
49.C 289B
58.C 289B
52.C 288B
100.C 283B
8.C 282B
19.C 281B
7.C 281B
78.C 279B
92.C 279B
23.C 278B
62.C 274B
36.C 272B
88.C 269B
90.C 269B
31.C 267B
17.C 266B
21.C 257B
29.C 254B
47.C 254B
94.C 252B
82.C 251B
45.C 247B
32.C 245B
66.C 235B
16.C 235B
35.C 234B
72.C 231B
83.C 229B
64.C 220B
70.C 220B
69.C 218B
91.C 217B
87.C 214B
68.C 212B
10.C 208B
97.C 206B
48.C 199B
63.C 194B
65.C 182B
84.C 181B
71.C 179B
81.C 177B
38.C 172B
上机归类.rar 79KB
共 300 条
- 1
- 2
- 3
jiangliagn
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0