永发信息网

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

答案:5  悬赏:70  手机版
解决时间 2021-07-24 16:55
  • 提问者网友:欲劫无渡
  • 2021-07-24 11:20

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
      
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
getch();
}

不了解为什么可以用

if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;

这样的方法来判断字符串中的英文字母数量 C是字符串 而与字符做比较 我不明白

我知道 输入一个字符 然后判断 他是什么 但是这个不了解 请帮忙解释下 谢谢

最佳答案
  • 五星知识达人网友:零点过十分
  • 2021-07-24 11:44
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
因为对于char类型的数据
a到z是连续的 A到Z连续的
但是这两段数据之间不是连续的
所以要判断一个字符是不是字母
那么只需要判断是否在这两段数据之间就行了
谭浩强的C语言那本书 最后面有个asc码的列表
你翻下看看就知道了
全部回答
  • 1楼网友:逐風
  • 2021-07-24 14:28
因为字符类型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()到的字符其实都是第一次你一并输入而遗留在输入缓冲区的字符。 这块用于输入缓冲的内存有一个标准的名称:标准输入流
  • 2楼网友:野味小生
  • 2021-07-24 13:56

每一个字符都可以转化成整型,在ASCII表中是对应的。。 http://baike.baidu.com/view/15482.htm?fr=ala0

看这里面的一张表吧,回车键对应的int型(DEC栏)是13.

所以单个字符 可以像 数字一样的来比较大小。

例如 (int)'a'==97 (int)'z'==122 (int)'A'==65 (int)'Z'==90

你可以用一下例子来明白

#include <stdio.h>

void main(void) { char example1 = 'a'; char example2 = '5'; int example3 = 110 ;

printf("example1: char: %c ....int:%d \n",example1,example1); printf("example2: char: %c ....int:%d \n",example2,example2); printf("example3: char: %c ....int:%d \n",example3,example3); }

  • 3楼网友:独行浪子会拥风
  • 2021-07-24 13:33
C为从输入的数据中取出的一个字符,不应该是字符串。比较是通过ASCII编码比较的。A—Z对应的ASCII编码是65—90、a—z对应的ASCII编码是97—122。是分开的。所以要用“||”。判明之后,字符统计累加器加1
  • 4楼网友:从此江山别
  • 2021-07-24 12:26

C不是字符串,是某一个字符。

while((c=getchar())!='\n')的功能是连续输入一个字符串,将这字符串中的每一个字符分别赋值给C然后进行处理。因此,if(c>='a'&&c<='z'||c>='A'&&c<='Z')就是用于判断某一个字符是不是字母的功能。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯