编写一个程序,打印输入中单词长度直方图第一部分统计单词长度
#include <stdio.h>#define OUT 0
#define IN 1
int main()
{
int i, ch, quantity, j, k, state;
int number;
for(i = 0; i < 10; ++i)
number = 0;
quantity = 0;
state = OUT;
while((ch = getchar()) != EOF){
if(ch != ' ' || ch != '/n' || ch != '/t'){
state = IN;
quantity++; //统计单词字符数
}
else
state = OUT; //一个单词结束
if(state == OUT){
if(quantity >= '0' && quantity <= '9') //将单词字符数储存在数组里
++number;
quantity = 0;
}
}
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", number);
} 本帖最后由 sunrise085 于 2020-1-10 12:24 编辑
不知道你要完成什么功能。数组number中存储的是每个单词的字符数,还是不同长度的单词个数。反正不管是哪一种,你的程序都完成不了这项功能。
1、将单词字符数储存在数组里,这个if模块有很大的问题。quantity是一个单词的长度,你拿它和‘0’以及‘9’比较深什么鬼?‘0’的值是48,‘9’的值58,很少有这么长的单词吧。你是要达到什么目的?
2、统计单词字符数的if判断条件应该用与(&&)而不是或(||),另外,回车和tab中的斜杠写错了。
3、你的程序不会将最后一个单词统计进去,以你为最后一个单词结束的时候,getchar()获得的值是EOF,直接跳出循环了,不会进入 将单词字符数储存在数组里 这个循环。
帮你修改了一下不知道是否是你需要的功能,你也没说清你的要求。。。
#include <stdio.h>
#define OUT 0
#define IN 1
int main()
{
int i, quantity, j, k, state;
char ch;
int number;
for(i = 0; i < 10; ++i)
number = 0;
quantity = 0,j = 0;
state = IN;
while((ch = getchar()) != EOF and j<10){
if(ch != ' ' && ch != '\n' && ch != '\t'){
quantity++; //统计单词字符数
}
else
state = OUT; //一个单词结束
if(state == OUT){
number=quantity; //将单词字符数储存在数组里
quantity = 0;
state = IN;
}
}
if(j<=10)
number=quantity;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", number);
return 0;
} sunrise085 发表于 2020-1-10 09:53
不知道你要完成什么功能。数组number中存储的是每个单词的字符数,还是不同长度的单词个数。反正不管是哪一 ...
谢谢大佬啦,是我没说清楚,我想用number储存每个长度得单词分别有几个,还有个问题,我在看c程序设计里有一个例子其中解释是这样的:
if (c >= '0' && c <= '9')
用于判断c中得字符是否为数字。如果他是数字,那么该数字对应的值是c-'0'
这里得'0'到'9'为什么能代表数字而不是被翻译到ASCII表里得特殊符号
WwangHB 发表于 2020-1-10 14:02
谢谢大佬啦,是我没说清楚,我想用number储存每个长度得单词分别有几个,还有个问题,我在看c程序设计里 ...
判断c中的字符是否为数字,首先c要是字符char类型。你的程序中quantity是整型int啊!
若c是char类型,if (c >= '0' && c <= '9')是能够判断c是否为数字。
你需要统计每个长度的单词的个数,用number是不够的,长度超过10的单词也是有的。我一会儿帮你看看怎么写 本帖最后由 sunrise085 于 2020-1-10 16:14 编辑
WwangHB 发表于 2020-1-10 14:02
谢谢大佬啦,是我没说清楚,我想用number储存每个长度得单词分别有几个,还有个问题,我在看c程序设计里 ...
#include <stdio.h>
#include <malloc.h> //这个头文件必须要有,动态创建数组需要用到
#define OUT 0
#define IN 1
int main()
{
int i, quantity, max, j, k, state;
char ch;
int* number = (int*)malloc(sizeof(int)*2);//不知道数组长度,动态创建数组,数组下标= 单词长度-1
max=2;
for(i = 0; i < max; i++)
*(number+i) = 0;
quantity = 0;
state = IN;
while((ch = getchar()) != EOF){
if(ch != ' ' && ch != '\n' && ch != '\t'){
quantity++; //统计单词字符数
}
else
state = OUT; //一个单词结束
if(state == OUT){
if(quantity>max){ //该单词太长,原数组长度不够,动态扩充数组长度
number==(int *)realloc(number,max*sizeof(int));
for(i = max; i < quantity;i++)//扩充的部分数组赋初值
number = 0;
max=quantity;
}
number++; //数组中对应长度的计数值+1
quantity = 0;
state = IN;
}
}
//以下几行是将最后统计的一个单词添加到对应的计数值中。这几行代码和上面 if(state == OUT)模块中的基本一样
if(quantity>max){
number==(int *)realloc(number,max*sizeof(int));
for(i = max; i < quantity;i++)
number = 0;
max=quantity;
}
number++;
printf("统计结果:\n");
for (i = 0; i < max; ++i)
printf("长度为%d的单词有 %d个.\n", i+1,number);
return 0;
} {:10_254:}
页:
[1]