m0_58210847 2021-07-03 20:58 采纳率: 100%
浏览 45
已采纳

编写一个函数删除字符串a中

C++ 求编写一个函数void fun(char *a),删除字符串a中除前导和尾部连续的#之外,其余的#全部删除。在main函数中,从键盘输入带#且无空格的字符串,调用fun函数处理字符串,并将字符串输出到屏幕
例如:###a#b##,运行结果为###ab##

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-07-03 20:59
    关注

    遍历比较字符是否为*,将后续字符全部前移一位
    你这参数是char a,不是字符串啊,还请给出字符串参数的样式

    void fun(char *a)
    {
      int i,n = 0;
      int s=-1,e=-1;
      for(i=0;a[i] != '\0';i++)   //首次遍历,找出前导和续尾*号外其余字符的起点和终点位置,以便下次循环处理
      {
        if(a[i] != '*') //找到不是*号的字符
        {
          if(s==-1)  //如果尚未标记起点,则该字符位置即为起点
            s = i;
            e = -1; //结束位置先设置为无效
        }
        else //如果找到一个*号
        {
          if(s >= 0 && e==-1)   //如果已经标记了起点,且没有标记终点,那么将当前*号字符位置作为终点
            e = i; 
        }
      }
      if(e == -1) //不是用*号结尾,则数组尾部即为终点
        e = i;
      while(s < e) //遍历处理所有中间字符
      {
        if(a[s] == '*') //遇到*号删除
        {
          for(i=s;a[i] != 0;i++) //将起点到字符串结束的字符全部前移一个位置
           a[i] = a[i+1];
          e--; 
        }
        else
          s++;
      }
    }
    
    void main()
    {
        char a[100];
        scanf("%[^\n]",a);
        fun(a);
        printf("%s\n",a);
        system("pause");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译