一道练习题,本人做了好久才做出来,有些不懂的地方请指教,谢谢
编写程序包括下面的函数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; }
虽然做出来了,但还是有不太懂的地方,请指教,谢谢!