一道练习题,本人做了好久才做出来,有些不懂的地方请指教,谢谢
编写程序包括下面的函数main函数:定义数组,实现菜单,获取用户输入,调用函数
input函数:输入任意长度的字符串
Delete函数:删除字符串中用户指定的字符
goleft函数:将删除指定字符后的字符串向左轮转2位
函数原型:
void input(char *);
void Delete(char *,char);
void goleft(char *);
测试用例: 程序执行,显示“please input string”
用户输入,“a*bb**ccc***dddd****”
程序执行,显示“please intput the char”
用户输入,“*”
程序执行,显示“abbcccdddd”
程序执行,显示”after goleft 2 location”
程序执行,显示“bcccddddab”
程序执行,显示“continue?”
用户输入“1或者y” 重复上述过程
用户输入“2或者n” 程序结束
程序代码:#include<stdio.h>
int main()
{
void input(char *);
void Delete(char *,char); //函数声明
void goleft(char *);
char string[100],c;
char ch;
while(1)
{
printf("please input string:\n");
input(string); //调用input函数,输入字符串string
printf("please intput the char:\n");
scanf("%c",&c); //输入要删去的字符
getchar(); //吃掉回车
Delete(string,c); //调用Delete函数,删除字符串string中指定的字符c
printf("%s\n",string);
printf("after goleft 2 location:\n");
goleft(string); //调用goleft函数,使字符串string向左轮转2位
printf("%s\n",string);
printf("continue?\n");
ch=getchar(); //输入y或者n
getchar(); //吃掉回车
if(ch=='2'||ch=='n')
break;
}
return 0;
}
void input(char *str)
{
gets(str); //输入字符串
}
void Delete(char *str,char c)
{
char *p1;
int i=0;
p1=str;
for(;*p1!='\0';)
{
if(*p1!=c)
{
*(str+i)=*p1; //这里我做了好久,写得很乱,请指教
i++;
p1++;
}
else p1++;
}
*(str+i)='\0';
}
void goleft(char *str)
{
char s[100],*p1,*p2;
for(p1=str+2,p2=s;*p1!='\0';p1++,p2++)
*p2=*p1; //这里我只会这样做,如果向左轮转3位,就肯能不会了
p1=str; //求这类问题的方法,谢谢
*p2++=*p1++;*p2++=*p1;*p2='\0';
for(p1=str,p2=s;*p1!='\0';p1++,p2++)
*p1=*p2;
}虽然做出来了,但还是有不太懂的地方,请指教,谢谢!






