标题:一道练习题,本人做了好久才做出来,有些不懂的地方请指教,谢谢
取消只看楼主
我是殊帕面
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2014-3-30
结帖率:100%
已结贴  问题点数:20 回复次数:0 
一道练习题,本人做了好久才做出来,有些不懂的地方请指教,谢谢
编写程序包括下面的函数
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; 
}

虽然做出来了,但还是有不太懂的地方,请指教,谢谢!
搜索更多相关主题的帖子: 编写程序 练习题 please 字符串 用户 
2014-04-28 20:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430785-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155738 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved