这段代码怎么理解:

suwy2007 2008-10-11 11:36:41
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
//去掉str中的sub代码段。
int main(void)
{
char uu[20],*p,*sub="ask",*str="askdaskkaskdaskg",*str2;
int n=0,i=0;
p=sub;
str2=str;
while(*str2)
{
while(*p)
{
if(*p==*str2) //此处只比较了第一个字符,

break;

p++;
}
if(*p=='\0')
{
uu[i]=*str2;
i++;
}
str2++; //这里str2 是加了,可是怎么p又指向了sub呢,不是应该
//移到第二个字符接着比较吗?奇怪,运行结果却是对的。
p=sub;
}
uu[i]=0;
str=uu;
printf("\n%s",str);
return 0;



}
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
suwy2007 2008-10-12
  • 打赏
  • 举报
回复
anglecloudy 的最清楚了。我是认为它要去除整个的ask了。假如有askskask那么去掉后还会剩下sk,其实按照这个是什么都没有剩下。结贴了。谢谢anglecloudy ,谢谢大家。
zgjxwl 2008-10-12
  • 打赏
  • 举报
回复
=_=
OenAuth.Net 2008-10-11
  • 打赏
  • 举报
回复
char uu[20],*p,*sub="ask",*str="askdaskkaskdaskg",*str2;
我来解释一下过程吧
首先*p是指向ask的a的,
str2是指向askdaskkaskdaskgr的a

第一轮:开始大循环-》进入小循环,发现*p==*str2退出,p的位置没变所以不为"\0",执行str2++,str2指向's',p重新指向sub,还是'a'(这次没有作用)
第二轮 开始大循环-》进入小循环,发现*p!=*str2,执行p++,p指向's'-》再次进入小循环,发现*p==*str2退出,p不为"\0",执行str2++,str2指向'k',p重新指向sub,还是'a'(如果没有这个操作,程序肯定出错)
第三轮 开始大循环-》进入小循环,发现*p!=*str2,执行p++,p指向's'-》再次进入小循环,发现*p!=*str2,执行p++,p指向'k'-》再次进入小循环,发现*p==*str2退出,此时p不为"\0",执行str2++,str2指向'd',p重新指向sub,还是'a'(如果没有这个操作,程序肯定出错)
...

知道作用了吧,你如果没有那个操作,你把程序走一次看看
开心爸爸84 2008-10-11
  • 打赏
  • 举报
回复
你那个break 直接把p++跳过了
开心爸爸84 2008-10-11
  • 打赏
  • 举报
回复

if(*p==*str2) //此处只比较了第一个字符,
break;
p++;

改成
if(*p==*str2) //此处只比较了第一个字符,
{
p++
break;
}
可以不

OenAuth.Net 2008-10-11
  • 打赏
  • 举报
回复
while(*p)
{
if(*p==*str2) //此处只比较了第一个字符,
break;
p++; //这个操作会使p位置变化,如果不在下面进行p=sub操作的话,p就不会指向ask字符串的首地址了
}
阿呆_ 2008-10-11
  • 打赏
  • 举报
回复
这段代码不是去除sub子串,而是将子串中所有用过的字符都去掉. 比如子串是"abc", 那么运行后str中将不包含'a', 'b'或'c', 不管它们的位置如何.
suwy2007 2008-10-11
  • 打赏
  • 举报
回复
我的意思是只比较了sub的第一个字符,第二个字符在哪里比较的呢?p没有移动到第二个字符啊。
aaajj 2008-10-11
  • 打赏
  • 举报
回复
p++; 
}
if(*p=='\0')
{
uu[i]=*str2;
i++;
}
str2++; //这里str2 是加了,可是怎么p又指向了sub呢,不是应该
//移到第二个字符接着比较吗?奇怪,运行结果却是对的。
p=sub;
}
uu[i]=0;
str=uu;
printf("\n%s",str);
return 0;

一个字符串中可能有多个sub字符串,都要找出来

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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