你的怎么感觉这么简单呢,我这里有些解答你看下
void StrOR(void)
{int i,righto,j,s,k;
char tem[80];
for(i=0;i<maxline;i++) /*倒序循环*/
for(j=strlen(xx[i])-1;j>=0;j--)
{
k=0;
memset(tem,0,80); /*初始化字符串数组tem*/
if(xx[i][j]=='o')
/*如果当前字符为'o',进入以下语句*/
{righto=j; /*则将此字符中位置j的值赋给righto*/
for(s=righto+1;s<strlen(xx[i]);s++)
tem[k++]=xx[i][s]; /*从righto的下一跳开始将其后所有的字符都存入到tem中*/
for(s=0;s<righto;s++) /*从当前行首部开始到出现字符'o'的位置(righoto)之前开始循环*/
if(xx[i][s]!='o') tem[k++]=xx[i][s]; /*将不是字符'o'的字符全存入到tem中*/
strcpy(xx[i],tem); /*将当前已处理的字符重新存入当前行xx*/
}
else continue;
}
}
还有另一个解法
题目要求的字符串中所有小写字母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';
}
}
我对第一种还是可以理解的,第二种我不太明白,因为对指针不熟,
你慢慢看下吧