qq_46264842
qq_46264842
采纳率0%
2021-03-07 23:34

c 两个字符串数字相加

看看下面的代码  我想知道

kk=kk+hh+ll;kk是字符串指针,hh ll 为整数     我多次实验下来是删除操作

我想知道这个操作的原理是什么?

我认为会影响到a 的数据,但实际输出后并没有影响a这个二维字符串的数据

//char a[N][80] 已经存在  int  k也存在


    char Y[80];
    cout<<"\n输入要删除的字符串:";cin.getline(Y,80);
    for(int i=0;i<k;i++){
   
        char *kk=a[i];
        while(BF(kk,Y)>-1){    //BF是查找字符串返回该位置
                int hh=BF(kk,Y);
                int ll=strlen(Y);int j=hh;
                for(;kk[j+ll]!='\0';j++){
                    kk[j]=kk[j+ll];    
                }   
                kk[j]='\0';
                kk=kk+hh+ll;    //删除操作
        }   
    }

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • weixin_42910064 泡视界 1月前

    哈哈,看到有人批评你命名了。罗嗦几句,写的代码要给别人读确实要好好起名,此外要问别人问题就把问题说清楚,比如你的BF函数,贴上来让大家知道具体是干嘛的。你说BF是查找字符串返回该位置,到底是找 Y 是 a[N][80] 中第几行的意思,还是找 Y 在某一行第几列的意思,所以BF贴上来或是说清楚,你说是吧?

    接下来解答你的疑问,这建立在我猜测 BF找的是Y在 a[N][80] 中第几行的基础上。

    删除操作不是你理解的 kk=kk+hh+ll;这一句,而是 for 循环实现了删除。我们捋一捋哈。

    1. kk是指针,指向 a[N][80]的首行

    2. hh是整数,代表Y在a中的第几行。

    3. ll是常数80.

    那么for循环实现的就是

    int j=hh;                    //获取Y在的行数,从此行开始
    for(;kk[j+ll]!='\0';j++){    //循环直至a中没有内容为止
        kk[j]=kk[j+ll];          //将此行替代为下一行的内容
    }
    kk[j]='\0';                  //将原来最后一行设置为'\0',就是删掉原来最后一行

    所以你说的

    kk=kk+hh+ll;

    这一句,并没有删除的功能,只是将kk这个指针,指向了被删除行的下一行而已。

    这么说你明白了吧

    点赞 2 评论 复制链接分享
  • cpp_learner cpp_learner 1月前

    首先你这命名规范和编码风格着实让我感动。其次,我个人觉得删除字符串的代码在for循环中 kk[j]=kk[j+ll];    将后面的字符串往前赋值覆盖达到删除效果。至于 kk=kk+hh+ll;    //删除操作,你又将a数组的首地址指向了删除字符串后的首地址,不知道你是何用意。我个人理解是这样的。

    点赞 评论 复制链接分享