一行代码不解,求高手

labiying 2010-12-20 06:03:48
一个文本编辑器其中的一部分代码

{typedef char datatype;
typedef struct {
datatype a[MAXSIZE];
int size;
}e_list;

void dele_print(e_list p,e_list slt) /*输出删除某一字符串后的文章*/
{
int i,j,succ;
i=0;succ=0; /*用i扫描正文t,succ为匹配成功标志*/
while((i<=slt.size-p.size+1)&&(!succ))
{
j=0;succ=1; /*用j扫描模式p*/
while((j<=p.size-1)&&succ)
if(p.a[j]==slt.a[i+j]) j++;
else succ=0;
i++;
}
if(succ)
{
for(j=0;j<(slt.size-p.size-1);j++)
{
slt.a[i-1]=slt.a[i+p.size-1];
i++;
}
slt.size=slt.size-p.size;
for(i=0;i<slt.size;i++)
{
printf("%c",slt.a[i]);
}
printf("\n");
}
else printf("\n错误!没有与字符串相配的子串!");



其中的 while((i<=slt.size-p.size+1)&&(!succ))
是什么意思?尤其是这句话i<=slt.size-p.size+1还有,为什么有求匹配不成功?
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huigezi123 2010-12-22
  • 打赏
  • 举报
回复
看上去slt是整个文本内容,p是要删除的字符串,succ是一个操作完成的标志。
从第一个字符开始p字符串比较,如果匹配就不输出,表示被删除了,i<=slt.size-p.size+1表示删除后正文的长度。
我不懂电脑 2010-12-21
  • 打赏
  • 举报
回复
i<=slt.size-p.size+1
表示正文剩余部分大于被搜索字符串长度,还可以继续搜索。
labiying 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 songhtao 的回复:]

i<=slt.size-p.size+1
表示正文剩余部分大于被搜索字符串长度,还可以继续搜索。
[/Quote]
那为什么还要+1
labiying 2010-12-20
  • 打赏
  • 举报
回复
全文
while((i<=slt.size-p.size+1)&&(!succ))//计算不同类型容器中的元素个数的 文本长度


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 1000

{typedef char datatype;
typedef struct {
datatype a[MAXSIZE];
int size;
}e_list;

e_list s;
e_list t;
/*输出删除某一字符串后的文章*/

void ptint_slt(e_list slt) /*输出文本*/
{
int i,j=0;
if(!slt.size) {printf("\n错误!");exit(1);}
else
for(i=0;i<slt.size;i++)
{
printf("%c",slt.a[i]);
j++;
if(j%20==0) printf("\n");
}
}

void letter_number(e_list slt) /*全部字母个数*/
{
int i,j=0;
if(!slt.size) {printf("\n错误!");exit(1);}
else
for(i=0;i<slt.size;i++)
{
if((slt.a[i]>='a'&&slt.a[i]<='z')||(slt.a[i]>='A'&&slt.a[i]<='Z'))
j++;
}
printf("%d",j);
}

void space_number(e_list slt) /*全部空格个数*/
{
int i,j=0;
if(!slt.size) {printf("\n错误!");exit(1);}
else
for(i=0;i<slt.size;i++)
{
if(slt.a[i]==' ')
j++;
}
printf("%d",j);
}

void size_number(e_list slt) /*文章总字数*/
{
printf("%d",slt.size);
}

void dele_print(e_list p,e_list slt) /*输出删除某一字符串后的文章*/
{
int i,j,succ;
i=0;succ=0; /*用i扫描正文t,succ为匹配成功标志*/
while((i<=slt.size-p.size+1)&&(!succ))
{
j=0;succ=1; /*用j扫描模式p*/
while((j<=p.size-1)&&succ)
if(p.a[j]==slt.a[i+j]) j++;
else succ=0;
i++;
}
if(succ)
{
for(j=0;j<(slt.size-p.size-1);j++)
{
slt.a[i-1]=slt.a[i+p.size-1];
i++;
}
slt.size=slt.size-p.size;
for(i=0;i<slt.size;i++)
{
printf("%c",slt.a[i]);
}
printf("\n");
}
else printf("\n错误!没有与字符串相配的子串!");
}

int main()
{
int i;
int right;
s.size=0;
printf("请输入一个字符串:");
for(i=0;i<MAXSIZE;i++)
{
s.a[i]=getchar();
s.size++;
if(s.a[i]=='\n') {s.size--; break;}
}
printf("\n文本录入完毕!输出的文本为..\n");
ptint_slt(s);
printf("\n全部字母个数为:");
letter_number(s);
printf("\n全部空格个数为:");
space_number(s);
printf("\n文章总字数为:");
size_number(s);
printf("\n要删除的字符串为:");
for(i=0;i<MAXSIZE;i++)
{
t.a[i]=getchar();
t.size++;
if(t.a[i]=='\n') {t.size--; break;}
}
printf("\n删除字符串后的结果为:");
dele_print(t,s);
system("pause");
return 0;
}}

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧