C语言怎么计算输入字符种类?
#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啊? 展开
写程序首先要明确输入和输出。假设你要求在控制台输入,以回车为结尾;输出一个正整数,表示输入字符串中字符种类数。
设计算法:
读入和输出部分很简单,关键在于处理问题的部分——如何统计。
算法一:建立一个标本数组,然后遍历整个字符串,如果发现不存在标本的字符,将其放入标本,计数器加1。这个算法的时间复杂度n^2,空间复杂度为1。
算法二:算法一中相当一部分时间浪费在检查字符是否有样本这件事情上,对这一步进行改进:样本数组的索引方式改为按ASCII索引。即当前字符为‘a’,只需检查样本数组下标为97的元素是否存在即可。时间复杂度降为n,空间复杂度仍为1,但是占用的空间有所增加。
算法三:将样本数组改成一颗二叉搜索树,每次检查时就可以用二分查找。时间复杂度为nlogn,空间复杂度为1,但是占用的实际空间和一一样多。
算法四:二叉搜索树还可以改成B-树,请自行探索。问题到此为止已经变为一个搜索、添加问题。
从编程实现上考虑,算法一的时空复杂度是最烂的,它的空间复杂度并不会优于算法二, 你在统计之前并不知道种类有多少,所以你只能按最多的情况去申请。算法三虽然的确节省了一些空间,但是这点空间真的不算什么,而且它的时间复杂度可能会退化到一的时间复杂度,写起来也相对麻烦,所以舍弃这种方法。故我推荐选择算法二。
拓展问题:怎样用c语言实现统计一个篇文章中的单词及它们出现的页数。
#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 用的太久了 我要下线了 所以最好你全懂了,不要追问了;
可以用强制转型:将字符转换成Ascii的值:
0对应的Ascii的是:48
9对应的是:57
if((int)ch>=48&&(int)ch<=57)
a++;
else
b++;
字符: 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)
你可以通过字符的编码来确定