C语言怎么计算输入字符种类?
#include int main(){int n=0;while(getchar()!='
')n++;printf("输入了%d个字符",n);return 0;}
#includechar show(char m){if(m>='0'&&m<='9') //这里要检查的是m!!return 1;return 0;}void main(){char ch;while(scanf("%c%*c",&ch)!=EOF) //每组一行,就要去掉回车!{if(show(ch)==1){printf("Digit
");}else{printf("Other
");}}}
写程序首先要明确输入和输出。假设你要求在控制台输入,以回车为结尾;输出一个正整数,表示输入字符串中字符种类数。
设计算法:
读入和输出部分很简单,关键在于处理问题的部分——如何统计。
算法一:建立一个标本数组,然后遍历整个字符串,如果发现不存在标本的字符,将其放入标本,计数器加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()))!='
')//注意这里加的括号
{
if (ch>='0'&&ch<='9')
a++;
else
b++;
}
printf("%d%d
",a,b);//加个空格更好区分
return 0;
}
//希望采纳! 亲!因为学校断网,所以现在用的是CMCC 用的太久了 我要下线了 所以最好你全懂了,不要追问了;
可以用强制转型:将字符转换成Ascii的值:
0对应的Ascii的是:48
9对应的是:57
if((int)ch>=48&&(int)ch<=57)
a++;
else
b++;
方法很简单,是根据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)
你所有输入的东西,都是字符。
你可以通过字符的编码来确定
C语言用for循环输入字符(#结束输入)并立刻输出,如何统计出一共输入的...
输入字符,对小写字母ASCII码处理后打印,其它字符不处理直接打印。输入#号结束输入。统计输入字符的个数(不包括回车和#)。思路:内嵌循环输入无视回车。下面是改写内容:include <stdio.h> int main(){ char chChar=0;int i=0;for (i=0;chChar!='#';i++){ while((chChar=getchar())==...
c语言怎么统计输入的汉字的个数和英文单词的个数
include <stdio.h>int main(void){ char s[1000]; int c,e; char *cp; gets(s); cp = s; c = e = 0; while(*cp) { if(*cp<0) { c++; cp++; } else if((*cp >= 'a' && *cp <= 'z') || (*cp >= 'A' && *cp <...
C语言编程! 编写程序,计算输入的数字、字母和其他字符的个数。_百度...
{ char a[1024]= {0};\/*接收输入的字符,由于gets不检查长度,所以弄大点*\/ int hash_tbl[128]= {0};\/*hash 表*\/ int i;printf("Please input string:\\ ");gets(a);\/*从标准输入读字符*\/ for(i=0;a[i]!='\\\\0';i++){ hash_tbl[(int)a[i]]++;\/*计算输入字符的个数*\/...
C语言。编写一个程序统计输入字符的大写字母个数m和小写字母个数n,并...
你这代码已经实现了计算大写字母的功能,你只要再定义一个变量计数小写字母比如int n,然后在循环中添加一个小写字母的判断计数(n++)。include <stdio.h> int main(){ char input[256]={0};int i=0,m=0,n=0;printf("请输入字符串:\\n");scanf("%s",input);while(input[i]!='\\0'){ ...
c语言如何统计输入的中文字符有多少笔画?(排序)
两个思路 1、录入学生姓名的时候,就将笔画输入进去。然后统计时就可以按照预先录入的笔画来排序啦。如果只是学校做作业,可以按这个思路。2、维护一整套汉字笔画字典。统计时查找汉字的笔画然后排序。如果是开发用户实际业务的软件,可以按这个思路。
搜狗输入法怎么查看打了多少字详细教程
1把输入法按语言栏显示2搜狗从左到右一共6个可以点击的地方,点击倒数第二个,是个小人头3进入用户账户界面注册一个账户4关闭界面,再点击小人头,登陆5重启计算机再点小人头确认是否登陆了。可以的右键点击搜狗皮肤,输入统计。注册一个搜狗通行证,点击输入法工具条上的通行证人像标志即可统计打字总数...
求助c语言怎么用strlen计算输入字符串的长度
直接调用strlen即可。strlen原型为 int strlen(char *str);功能为求str的长度,并返回。于是计算输入字符串长度的代码可以写作 char str[1024];int len;scanf("%s",str);\/\/输入字符串。len = strlen(str);\/\/计算长度并存于len中。
C语言题目(数组部分):输入一行字符,统计其中大写字母、小写字母、数字及...
void counter(char*);int n,i;char array[100];printf("enterastring:");gets(array);counter(array);return0;} void counter(char*p){ int i,n,numUpperCase=0,numLowerCase=0,numSpace=0,numOther=0;n=strlen(p);for(i=0;i<n;i++){ if(...
C语言 计算出的数据输入字符串数组
{ int same_ch;char a[100];char c;printf("请输入字符串:");gets(a);printf("请输入欲统计的重复字符:");c = getchar();same_ch = count_str_same(a,c);printf("该字符串中字符%c重复%d次\\n",c,same_ch);return 0;} int count_str_same(char * p,char ch){ char * q ...
C语言 输入一行字符串,统计字母,数字和其它符号的个数
h> int main(){char s[200];int i,zm=0,sz=0,qt=0;for(i=0;s[i];i++)if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')zm++;else if(s[i]>='0'&&s[i]<='9')sz++;else qt++;printf("zm=%d, sz=%d, qt=%d\\n",zm,sz,qt);return 0;} ...
水差阿尔: #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 用的太久了 我要下线了 所以最好你全懂了,不要追问了;
荆门市14726083448: C语言判断输入类型 - ?
水差阿尔: 先全部按照字符串输入,然后你再通过ASCII吗去判断里面每一个字符代表的是不是数字 这个方法想到了就很简单,相信题主肯定可以轻松自行完成编码,我就不贴代码了.
荆门市14726083448: c语言:字符分类统计 - ?
水差阿尔: #include void main() { char c[100]; int i,n,ch=0,blank=0,number=0,other=0; printf("Input something:\n"); gets(c); n=strlen(c); for(i=0;i { if((c[i]>='a' && c[i]='A' && c[i] else if(c[i]==' ') blank++; else if(c[i]>='0' && c[i] else other++; } printf("ch:%d,blank:...
荆门市14726083448: C语言判断单个字符类型 - ?
水差阿尔: #include<stdio.h> char show(char m) { if(m>='0'&&m<='9') //这里要检查的是m!! return 1; return 0; } void main() { char ch; while(scanf("%c%*c",&ch)!=EOF) //每组一行,就要去掉回车! { if(show(ch)==1) { printf("Digit\n"); } else { printf("Other\n"); } } }
荆门市14726083448: C语言如何判断输入的数据类型? - ?
水差阿尔: (int)(3*i+d/2)是把(3*i+d/2)强转成int ,+3.0后自动结果会取精度高的那种类型,于是变成了double
荆门市14726083448: 任意输入一个字符,用程序实现判断输入的字符是什么类型?(要求最少要能判断大写字 - ?
水差阿尔: #include void main(){ char ch; printf("please input a character:"); scanf("%c", if(ch...
荆门市14726083448: C语言 输入英文字母 通过整形数组表示 输入的字符种类和次数 - ?
水差阿尔: #include<stdio.h> #include<stdlib.h> int main() {int count[128];//128种asscii码for(int i=0;i<128;++i)count[i]=0;//未输入必须初始化数组char c;int i=0;printf("请输入一串字符并以#结尾\n");c=getchar();while(c!='#'){count[c]++;c=...
荆门市14726083448: C语言程序题 判断输入的字符类型 - ?
水差阿尔: #includevoid main( ) { printf("请数输入一个字符:"); char ch = getchar(); if(ch>= 'a'&&ch<= 'z') printf("该字符是小写字母"); else if(ch >= 'A'&&ch <='Z') printf("该字符是大写字母"); else if(ch>='0'&&ch <='9') printf("该字符是数字"); else printf("该字符是其他字符") ; printf("\n") ; system("pause"); }
荆门市14726083448: 分类统计字符 C语言 - ?
水差阿尔: 例:使用while语句循环统计 : #include<stdio.h> int main() { char c; int letters_num = 0, space_num = 0, digit_num = 0, other_num = 0; while ((c = getchar()) != '\n')//输入换行符退出循环 { if ((c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z')) letters_num++; ...
荆门市14726083448: switch语句 - ?
水差阿尔: c语言的话 #include #includemain() { char i; printf("please input a char(a...z):");/*从键盘输入字符*/ scanf("%c",&i); switch(isalpha(i))/*判断是否为字母*/ { case 0:printf("%c is not a char\n",i);break;/*不是字母*/ default:printf("%c ifs a char\n",i);break;/*为字母*/ } } 这是简单的判断是否为字母的程序,剩下的是否为数字,大写还是小写,是否为空格,是否为ASCII码,是否为控制字符,就自己来写吧