gpt4 book ai didi

C-打印直方图

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:38 27 4
gpt4 key购买 nike

这是来自 K&R 的问题:-

编写一个程序,打印输入单词长度的直方图。很容易绘制水平直方图;但垂直方向更具挑战性。

我不应该使用任何库函数,因为这只是一个教程介绍!

我已经编写了以下程序来执行此操作,但它有一些错误:-

1)如果单词之间有多个空白字符,程序将无法按预期运行。

2)如何知道'k'的最大值我的意思是如何知道输入中有多少个单词?

这是代码:-

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#define MAX_WORDS 100

int main(void)
{
int c, i=0, k=1, ch[MAX_WORDS] = {0};

printf("enter the words:-\n");

do
{
while((c=getchar())!=EOF)
{
if(c=='\n' || c==' ' || c=='\t')
break;
else
ch[i]++;
}
i++;
}
while(i<MAX_WORDS);

do
{
printf("%3d|",k);
for(int j=1;j<=ch[k];j++)
printf("%c",'*');
printf("\n");
k++;
}
while(k<10);
}

最佳答案

即使两个单词之间有多个换行符,这个程序也能正常工作,numWords 会给出单词的数量。

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
int ch, cha[100] = {0}, k = 1;
int numWords = 0;
int numLetters = 0;
bool prevWasANewline = true; //Newlines at beginning are ignored

printf("Enter the words:-\n");
while ((ch = getchar()) != EOF && ch != '\n')
{
if (ch == ' ' || ch == '\t')
prevWasANewline = true; //Newlines at the end are ignored
else
{
if (prevWasANewline) //Extra nelines between two words ignored
{
numWords++;
numLetters = 0;
}
prevWasANewline = false;
cha[numWords] = ++numLetters;
}

}

do
{
printf("%3d|",k);
for(int j=0;j<cha[k];j++)
printf("%c",'*');
printf("\n");
k++;
} while(k <= numWords);

return 0;
}

关于C-打印直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18930908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com