以下程序的输出结果是(itis)但是我不懂答案是怎么来的,初学C语言,请解释详细一些,谢谢

#include"string.h"#include"ctype.h"voidfun(charstr[]{inti,j;for(i=0,j=0;str[i];i++)if... #include "string.h"
#include "ctype.h"
void fun(char str[]
{int i,j;
for(i=0,j=0; str[i] ;i++)
if(isalpha(str[i]))
str[j]='\0';
}
main()
{char ss[80]="it is!";
fun(ss)
printf("%s\n",ss);
}
展开
 我来答
JINLegend
2013-08-23 · TA获得超过802个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:126万
展开全部

你用什么编译器编的?我怎么运行结果是P都没有呢?

#include "string.h"
#include "ctype.h" 
void fun(char str[])//这里漏了右括号
{int i,j;
  for(i=0,j=0; str[i] ;i++)
  if(isalpha(str[i]))//isalpha函数判断字符是否为英文字符(包括大小写),你这里第一个字符就是英文字符,自然被赋字符串结束符。结果你这个字符串一开始就是结束,所以啥都输不出。
  str[j]='\0';//上面j只赋了0就没在改动,你这应当是i才对吧?

main()
{char  ss[80]="it  is!";
fun(ss);//这里漏了分号,初学者最容易漏这个。
printf("%s\n",ss);
}
追问
我少打了一行,不好意思,if(isalpha(str[i]))后面是str[j++]=str[i]
追答
第一次循环:i=0,j=0
str="it is!"
isalpha(str[i]) =>true
str[j++]=str[i] => str="it is!"(未发生改变)
……
如此类推,到第三次循环i=2,j=2
str="it is!"
isalpha(str[i]) =>false
这么i=3,j=2

第四次循环,i=3,j=2
str="it is!"
isalpha(str[i]) =>true
str[j++]=str[i] => str="itiis!"(非字母字符' '被后面的i所代替)
至此就可以明白了,
这个程序就是要去除字符串里的非字母字符。
上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
ih_khhh
2013-08-23 · TA获得超过217个赞
知道答主
回答量:79
采纳率:100%
帮助的人:13.2万
展开全部
i=0的时候,str[i] = i,isalpha 为真,所以执行str[j] = '\0',此时j = 0,所以ss的第一个字符就是\0 了。绝对输出不了itis
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-23
展开全部
isalpha在程序里面起的作用,所以输出这样的结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
demps
2013-08-23 · 超过23用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:69.7万
展开全部
答案肯定是空
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
道行自在行2745
2013-08-23 · TA获得超过543个赞
知道答主
回答量:86
采纳率:0%
帮助的人:44.6万
展开全部
你的编译器该换换了..分号都不提示..牛X
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式