标题:求教 不胜感激
只看楼主
落玉
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-9-14
结帖率:0
已结贴  问题点数:20 回复次数:4 
求教 不胜感激

麻烦问一下谢谢

#include <stdio.h>
#include <string.h>

void fun(char s[],int c)
{
int i=0;
char *p;
p=s;
while(*p)
{
if(*p!=c)
{s[i]=*p;
i++;}
p++;
}
s[i]=0;
}

main()
{
static char str[]="turbo c and borland c++";
char ch;
FILE *out;
printf("原始字符串:%s\n",str);
printf("输入一个字符:");
scanf("%c",&ch);
fun(str,ch);
printf("str[]=%s\n",str);
strcpy(str, "turbo c and borland c++");
fun(str, 'a');
out = fopen("out.dat", "w");
fprintf(out, "%s", str);
fclose(out);
}
-------------------------------------------------------------------------------

while(*p)
{
if(*p!=c)
{s[i]=*p;
i++;}
p++;
}
注意此处
落玉<bilike@vip. 12:34:44
这个程序是要把要求的字符从字符串中删除
落玉<bilike@vip. 12:35:20
为什么
while(*p)
{
if(*p!=c)
{s[i]=*p;
i++;}
p++;
}
就输出正确
落玉<bilike@vip. 12:35:57
为什么
while(*p)
{
if(*p!=c)
s[i]=*p;
i++;
p++;
}
这样会按原来字符串输出
 求教 不胜感激
 
搜索更多相关主题的帖子: 感激 
2010-09-14 12:46
落玉
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-9-14
得分:0 
2010-09-14 13:09
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:20 
这很好理解啊!举个例子
比如字符串ababa  如果要删除a看第一种情况为什么对啊
解释如下:
首先第一个*p就等于a,所以直接跳出if语句的看大括号执行p++
使p指向b,然后在判断if表达式,*p!=c这时候是成立的,则s[0]=b;
然后执行i++
一次类推,就可以得到了你要的结果
而第二种情况呢:解释如下
由于第一次时候*p=a,则s[i]=*p;不执行所以呢就执行后面的i++和p++
此时i=1;p指向b
也就是说s[0]里的值没变!还是以此类推就可以得出为什么是原样输出了
其实楼主自己就像这样举例分析 应该能解决的啊
楼主在琢磨琢磨
2010-09-14 13:11
落玉
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-9-14
得分:0 
谢谢。。。我估计脑子进水了
2010-09-14 13:28
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
得分:0 
不用客气!下次注意好哈!!小声的说一句!楼主可以给分了哦
2010-09-14 14:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-320389-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.454477 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved