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

问题一:删除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解答:
将你书写的代码:
i++;
}
str.ch[str.length]='\0';
}
改为:
i++;
}
} //注意两个 '{' 相邻
str.ch[str.length-1]='\0';

试试!

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