C语言怎么计算输入字符种类?

刚学这个语言,编了一个计算输入数字的个数的程序,大概如下:#include<stdio.h>main(){charch;inta=0,b=0;while(ch=getch... 刚学这个语言,编了一个计算输入数字的个数的程序,大概如下:

#include <stdio.h>
main()
{char ch;
int a=0,b=0;
while (ch=getchar()!='\n')
{if (ch>='0'&&ch<='9')
a++;
else
b++;
}
printf("%d%d",a,b);
}
我输入123ab时,结果全认为不是数字。结果为0 5

我把条件修改为if(ch>=0&&ch<=9);去掉0和9的引号后,输入123ab,结果认为全是数字,结果是5 0
请问条件的大于0小于9用不用加引号啊? 怎么才能让我输入123ab得到 3 2啊?
展开
 我来答
我们必将知道
推荐于2017-09-28 · TA获得超过2171个赞
知道小有建树答主
回答量:1237
采纳率:92%
帮助的人:250万
展开全部
  1. 写程序首先要明确输入和输出。假设你要求在控制台输入,以回车为结尾;输出一个正整数,表示输入字符串中字符种类数。

  2. 设计算法:

    读入和输出部分很简单,关键在于处理问题的部分——如何统计。

    算法一:建立一个标本数组,然后遍历整个字符串,如果发现不存在标本的字符,将其放入标本,计数器加1。这个算法的时间复杂度n^2,空间复杂度为1。

    算法二:算法一中相当一部分时间浪费在检查字符是否有样本这件事情上,对这一步进行改进:样本数组的索引方式改为按ASCII索引。即当前字符为‘a’,只需检查样本数组下标为97的元素是否存在即可。时间复杂度降为n,空间复杂度仍为1,但是占用的空间有所增加。

    算法三:将样本数组改成一颗二叉搜索树,每次检查时就可以用二分查找。时间复杂度为nlogn,空间复杂度为1,但是占用的实际空间和一一样多。

    算法四:二叉搜索树还可以改成B-树,请自行探索。问题到此为止已经变为一个搜索、添加问题。

  3. 从编程实现上考虑,算法一的时空复杂度是最烂的,它的空间复杂度并不会优于算法二, 你在统计之前并不知道种类有多少,所以你只能按最多的情况去申请。算法三虽然的确节省了一些空间,但是这点空间真的不算什么,而且它的时间复杂度可能会退化到一的时间复杂度,写起来也相对麻烦,所以舍弃这种方法。故我推荐选择算法二。

  4. 拓展问题:怎样用c语言实现统计一个篇文章中的单词及它们出现的页数。

汐日南莘
推荐于2017-10-13 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:45%
帮助的人:7619万
展开全部
#include <stdio.h>
main()
{char ch;
 int a=0,b=0;
 while ((ch=(getchar()))!='\n')//注意这里加的括号
 {
     if (ch>='0'&&ch<='9')
     a++;
    else
      b++;
 }
printf("%d\t%d\n",a,b);//加个空格更好区分
return 0;
}
 
//希望采纳!  亲!因为学校断网,所以现在用的是CMCC  用的太久了  我要下线了 所以最好你全懂了,不要追问了;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暮影1994
2014-03-14 · TA获得超过2338个赞
知道大有可为答主
回答量:1215
采纳率:60%
帮助的人:400万
展开全部

可以用强制转型:将字符转换成Ascii的值:

0对应的Ascii的是:48

9对应的是:57

if((int)ch>=48&&(int)ch<=57)
  a++;
else
  b++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻之谁愚
2015-10-19 · TA获得超过4.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:77%
帮助的人:927万
展开全部
  方法很简单,是根据ASCII码表来的,在这个表中0~9的码值是连续的,a~z和A~Z也是连续的,所以判断字符类型就可以根据ASCII的值.
  字符: 0 ~ 9 对应ASCII:48 ~57
  字符: a ~ z对应ASCII:97~122
  字符: A ~ Z对应ASCII:65~90

  判断方法:
  数字:
  if (src[i]>0 && src[i]<9)
  大写字母:
  if (src[i]>65&& src[i]<90)
  小写字母:
  if (src[i]>97 && src[i]<122)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8ce788f
2015-11-13 · TA获得超过687个赞
知道小有建树答主
回答量:850
采纳率:80%
帮助的人:210万
展开全部
你所有输入的东西,都是字符。
你可以通过字符的编码来确定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式