C语言关于字符串的一个问题。。

void fun(char str[])
{
int i,j;
for(i=0,j=0;str[i];i++)
if(isalpha(str[i])) str[j++]=str[i];
str[j]='\0';
}
main()
{ char ss[80]="It is!";\***这里t和i之间有个空格**\
fun(ss);printf("%s\n",ss);
}

printf %s输出时不是遇到'\0'就会停止吗?
为什么还是输出了is?
求过程解释~!

你函数的功能是去处非字母字符,也就是删除空格个!,应该输出Itis
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-08
字符串是自动加上结束标识符的'\0',遇到这个停止,但是输出打印出来屏幕上看不到·
第2个回答  2012-07-08
晕,其实很简单,因为空格就是空格符不是终止符号'\0'
第3个回答  2019-04-10
C为从输入的数据中取出的一个字符,不应该是字符串。比较是通过ASCII编码比较的。A—Z对应的ASCII编码是65—90、a—z对应的ASCII编码是97—122。是分开的。所以要用“||”。判明之后,字符统计累加器加1
第4个回答  2019-06-11
C不是字符串,是某一个字符。
while((c=getchar())!='\n')的功能是连续输入一个字符串,将这字符串中的每一个字符分别赋值给C然后进行处理。因此,if(c>='a'&&c<='z'||c>='A'&&c<='Z')就是用于判断某一个字符是不是字母的功能。
第5个回答  2020-01-02
因为字符类型char里包含的,
实际上是字符的ascii码,也就是一个数值
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
就是比较c包含的
字符的数值
和字符'a',字符'z'等的
数值
的大小,看c是否在这个范围内,如果
'a'
<=
c
<=
'z'那么,c就是一个小写字符,因为
字母在ascii码表的位置是连续的,这也意味着他们的数值也是连续的
,所以可以用这种方式来界定c的范围从而判定c是小写字母还是大写字母或其他类型的字符(在这里只是判定c是否是一个字母)
while((c=getchar())!='\n')
的意思是
持续循环读取每个字符直到读到的字符是'\n'(换行符)为止,也就是这个程序可以对你输入的一行字符串中的每个字符进行处理,当你按enter也就是输入了'\n'以后,while就结束了
a++就是
a
=
a+1;a的值自增1
那是由于getchar是
从缓冲区读入字符
,你输入asfasfs然后按enter
"asfasfs\n"这个字符串就被放进了标准输入的buffer里,所以只要缓冲区有字符可读,那么getchar就可以获取到正确的内容!相当于你一次性把要输入的所有字符填充到缓冲区里,然后让getchar去依次读取每个字符。
你那个理解不对,对于
非缓冲IO来说
,你那个理解是正确的,但由于getchar是被缓冲的,所以当第一次执行到while((c=getchar())!='\n')的时候,
getchar()等待一个字符的输入,然而你再此时可以提供多于1个字符的输入(因为这些输入其实是被送进输入缓冲区的),你可以这么理解,getchar()只是给你打开了输入的门,然后你往里面塞东西,塞完之后,getchar再从这个房间里逐一把你塞得东西取出来,直到房间空了或者你停止了输入的动作。
举个例子:
#include
<stdio.h>
int
main()
{
int
n;
char
c;
c
=
getchar();
//
在这里你输入x123
scanf(
"%d",
&n
);
printf(
"%d",
n
);
return
0;
}
第一次getchar()的时候你一次性输入x123,x123就被送入输入缓存,然后getchar()的作用是取一个字符,所以x被取走,接下来的scanf,它也是从缓冲区里读入的,因为缓冲区里还有个123,所以scanf就把123送到n里了,所以scanf读到的其实是getchar()运行时输入而被遗留在输入缓冲区里的字符。
所以你那个while里除了第一次外,后面在遇到'\n'之前所有getchar()到的字符其实都是第一次你一并输入而遗留在输入缓冲区的字符。
这块用于输入缓冲的内存有一个标准的名称:
标准输入流

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网