三级网络100题分类版.doc
文本预览下载声明
四、字符串位置倒置: 3:原文:You can create an index on any field.
you have the correct record.
结果: n any field.Yu 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;Imaxline;I++)
{strl=strlen(xx[I]);
index=strl;
for(j=0;jstrl;j++)
if(xx[I][j]==o)
{for(k=j;kstrl-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;k0;k--)
xx[I][k]=xx[I][k-1];
xx[I][0]=ch;}
}
}
或者:
void StrOR(void)
{ int i;
char a[80],*p;
for(i=0;imaxline;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;imaxline;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;jstrlen(xx[i]);j++) tem[k++]=xx[i][j];
for(j=0;jrighto;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;imaxline;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;imaxline;i++)
{p2=p1=strchr(xx[i],\0)-\0;
t[0]=t1[0]=\0;
k=1;
while(k)
{
while(isalpha(*p1)==0p1!=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
显示全部