艾草837 2022-04-27 20:00 采纳率: 50%
浏览 20
已结题

为什么输出不了结果呢?求改一下!

P3. 编写函数void insert(char s1[],char s2[],char ch),功能为:在字符串s1中的指定字符ch后处插入字符串s2,如该字符串中无此字符,则不进行任何操作;若有多个相同字符,则在第一次出现的字符后插入。在主函数中输入字符串s1、s2和字符ch,并输出结果字符串s1。
如输入:AAB12345BCD
cdef
B
输出为:AABcdef12345BCD


#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void insert(char a[],char b[],char ch);

int main()
{
    char a[]="AAB12345BCD",b[]="cdef";
    char ch;
/*gets(s1);
  gets(s2);*/
    puts(a);
    puts(b);
    scanf("%c",ch);

    insert(a,b,ch);
    puts(a);
    return 0;
} 

void insert(char a[],char b[],char ch)
{
    char *p=a,*q;
    
    while(*p!=ch)
    {//确定字符ch的位置
        p++;
    }
    while(*b!='\0')
    {
        q=p;
        while(*q!='\0')
        { //确定a[]的最后的位置 
            q++;
        }
        while(q>=p)
        {//a[]向后移一个位置 
            *(q+1)=*(q--);
        }
        *(++q)=*(b++);//将b[]的一个字符赋给a[] 
        p++;
    }    
}
  • 写回答

1条回答 默认 最新

  • a5156520 2022-04-27 21:54
    关注

    获取字符ch时没用&,然后插入函数有点逻辑错误,因为复制操作部分我看了一会没看明白,所以我用另外的方式实现了复制操作,如下:

     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
     
    void insert(char a[],char b[],char ch);
     
    int main()
    {
        char a[]="AAB12345BCD",b[]="cdef";
        char ch;
    /*gets(s1);
      gets(s2);*/
        puts(a);
        puts(b);
        scanf("%c",&ch);
     
        insert(a,b,ch);
        puts(a);
        return 0;
    } 
     
    void insert(char a[],char b[],char ch)
    {
        char *p=a,*q;
        
        char t[20];
    
        while(*p!=ch&&*p!='\0')
        {//确定字符ch的位置
            //printf("p=%p,*p=%c\n",p,*p);
            p++;
            
        }
        if(*p=='\0'){  //如果没有找到指定字符退出 
            return ;
        }
        
        strcpy(t,++p);  //把字符串a找到指定字符后的字符串复制备份到数组t 
        
    
        while(*b!='\0')  //把数组b复制到字符串a指定位置后面 
        {
            
            *p=*b;
            b++; 
            p++;
            
            
    //        q=p;
    //        while(*q!='\0')
    //        { //确定a[]的最后的位置 
    //            q++;
    //        }
    //        while(q>=p)
    //        {//a[]向后移一个位置 
    //            *(q+1)=*(q--);
    //        }
    //        *(++q)=*(b++);//将b[]的一个字符赋给a[] 
    //        p++;
        } 
         
        strcpy(p,t);  //把字符串a后面的字符串接到新增部分后面 
    //    int i=0; 
    //    while(t[i]='\0'){
    //        *p=t[i];
    //        p++;
    //        i++;
    //    }
         
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c