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");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大