Нужно написать программу которая выводит гистограмму длин слов во входном потоке, с вертикальными столбцами.
Прграмма успешно написана, но вот с выравниванием столбцов возникли проблемы когда вместо символа # в столбце стоит пробел (несколькоп робелов), а за ним следует столбец с символом #. То есть длина пробела не сопоставима с длинной символа #.
Сделал выводом вместо пробелов черных #, которые сливаются с фоном. Но этот вариант не универсален.
Может как-то можно выравнять столбцы через формат в printf? У меня не получилось.
Или как можно определить цвет фона?
Код:
/*
* 1.13.2.c
*
* Created on: 22.08.2009
* Author: egd
*/
#include <stdio.h>
#include <stdbool.h>
#define BUFF 15
int main() {
int i, j, c, word = 0, words[BUFF];
bool noWord = false;
for (i = 0; i < BUFF; ++i)
words[i] = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t')
noWord = true;
else
++word;
if (word > BUFF)
word = BUFF;
if (noWord) {
++words[word-1];
word = 0;
noWord = false;
}
}
for (i = 1; i <= BUFF; ++i)
if (i >= 10)
printf("%2d ", i);
else
printf("%d ", i);
printf("\b\n");
for (i = 0; i < BUFF; ++i) {
for (j = 0; j < BUFF ; ++j)
if (words[j] >= i)
if (j >= 10)
printf(" # ");
else
printf("# ");
else
if (j >= 10)
printf(" \033[30m#\033[0m ");
else
printf("\033[30m#\033[0m ");
printf("\n");
}
return 0;
}
«Когда истинный гений появляется в этом низком мире, его можно узнать по тому знаку, что все глупцы объединяются против него»
Знакомая задачка. Керниган & Ритчи?
В Windows столбцы ровные выходят по вашему варианту.
В Linux'e не пробывал.
Мой работает и там и там. Кодировка UTF-8
А если эту задачу вы действительно решаете из Керниган & Ритчи, то идеология книги говорит о том, что бы вы решали задачи только теми методами и средствами языка, которые были описаны ДО этого упражнения, т. е. как бы не зная в языке ничего больше.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.