Где я ошибаюсь в своем ответе на создание гистограммы числа слов в предложении? Код работает только для 6 или менее слов

57
5

Вопрос обновлен

Где я ошибаюсь в этом коде, чтобы создать вертикальную гистограмму для количества букв в каждом слове в предложении? Код дает неправильный вывод, когда я даю этот стандартный ввод, we are going to write a really big sentence just to make sure я am not confused and writing it right.

Что-то большое, и я получаю ошибочный вывод.

Я пытаюсь использовать кучу (используя malloc и realloc), поскольку я хочу написать большое предложение, не беспокоясь о лимитах. Я знаю, что источником проблемы является выделение памяти, но я не понимаю точной проблемы. Получение ссылки на решение, доступное здесь, также было бы удивительным (пожалуйста, предложите, что мне нужно сделать, если есть дублирование вопроса, поскольку я новичок здесь)

#include<stdio.h>
#include<stdlib.h>
#define MAXLETTERLENGTH 30
int main()
{
int i,j,c,*nc,nw=0;
nc=(int *)malloc(sizeof(nw));
while((c=getchar())!=EOF)
{
if(c==' ' || c=='\t')
{
++nw;
nc = realloc(nc, (nw + 1) * sizeof(*nc)); /*The updated improvement based on M.M suggestion*/
}
else if(c=='\r' || c=='\n')
break;
else if(c=='\b')
nc[nw]--;
else if((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z'))
nc[nw]++;
}
/*while(nw>=0)
{
for(i=nc[nw];i>0;i-- && printf("%d| |\n",nc[nw]))
for(j=0;j<nw;printf(" ") && j++);
nw--;
}*/
for(i=MAXLETTERLENGTH;i>=1;--i)
{
for(j=0;j<=nw;j++)
{
if(i<=nc[j])
putchar('*');
else
putchar(' ');
}
putchar('\n');
}
free(nc);
return 0;
}

спросил(а) 2016-04-21T07:30:00+03:00 4 года, 5 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема