一只特立独行的青蛙 2018-09-01 10:35 采纳率: 50%
浏览 816
已结题

数据结构中关于串的问题,对《数据结构高分笔记》中的一段代码有疑问。。新手请教..

问题一:删除str中值为ch的所有字符

         图片是书中的代码,下面是我按照书中敲出来的代码
        是用定长顺序存储。

#include
#define maxsize 20

typedef struct
{
char ch[maxsize];
int length;
}Str2;

void main()
{

void de13(Str2 & str,char ch);

Str2 stra={"abidcef",8};
de13(stra,'a');

}

void de13(Str2 & str,char ch)
{
if(str.length!=0)
{
int num = 0;
int i,j;
i=0;
while(str.ch[i]!='\0')
{
if(str.ch[i]==ch)
{
++num;
for(j=i+1;str.ch[j]!=ch && str.ch[j]!='\0';++j)
str.ch[j-num]=str.ch[j];
i=j;
--str.length;
}
else
++i;
}
str.ch[str.length]='\0';

}

for(int i=0;i<str.length;i++)
{
printf("%c",str.ch[i]);
}
printf("\n");

}

运行有结果也确实不正确,我感觉是因为那个--str.length错了,是这样吗?。。还是说是我敲错了?

问题2:使用变长分配存储定义一个串,然后删除下标 i 的字符,不可以直接用str.ch[i]=str.ch[i+1];然后循环这样直接覆盖吗?图片说明

  • 写回答

1条回答 默认 最新

  • knold 2018-09-01 13:07
    关注

    问题1解答:
    将你书写的代码:
    i++;
    }
    str.ch[str.length]='\0';
    }
    改为:
    i++;
    }
    } //注意两个 '{' 相邻
    str.ch[str.length-1]='\0';

    试试!

    问题2解答:
    可以按你的方法直接覆盖,需要注意字符数组的范围,勿要越界。

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办