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

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条回答 默认 最新

  • 泡视界 2021-03-08 10:22
    关注

    哈哈,看到有人批评你命名了。罗嗦几句,写的代码要给别人读确实要好好起名,此外要问别人问题就把问题说清楚,比如你的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这个指针,指向了被删除行的下一行而已。

    这么说你明白了吧

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?