字符串s中只能存入字母和星号,利用指针的方式将s中的*全部移动到字母的尾部。例如s中输入三个星号abcd三个星号ef,处理后输出s为abcdef六个星号。下方给出主函数,大家需要写出fun函数。要求用指针的形式,不用下标的形式。
主函数如下
void main()
{
char s[50];
scanf("%s",s);
fun(s);
printf("%s",s);
}
一个实现,供参考:
#include <stdio.h>
#include <string.h>
void fun(char * s){
int i=0;
int j;
int star=0;
while(*(s+i)!='\0'){
// printf("before move ,i=%d,star=%d,s=%s\n",i,star,s);
while(*(s+i)=='*'&&(i+star)<strlen(s)){ //如果当前字符一直是星号并且没有处理完字符串,则将星号移到最后,并将后面的字符前移,
star++; //星号的数量加一
for(j=i;j<(strlen(s)-1);j++){//前移后面的字符串
*(s+j)=*(s+j+1);
}
*(s+strlen(s)-1)='*'; //将星号移到最后一个位置
//printf("i=%d,star=%d,s=%s\n",i,star,s);
}
i++; //指向后一个字符
}
}
int main()
{
char s[50];
scanf("%s",s);
fun(s);
printf("%s",s);
}