desert_rose, так попробуй.
Код | #include <stdio.h> #include <string.h> #include <ctype.h>
#define WIDTH 80 // максимальная ширина текста
int Words (char* str, int* alpha); // функция возвращает количество слов в строке void Feathering(char* str, int len); // функция растяжки строки
int main() { char text[WIDTH];
int i; // переменная управления циклом int width; // требуемая ширина текста(запрашиваем у пользователя) int lenstr; // длина строки
// ввод строки puts("Enter a string: "); fgets(text, WIDTH, stdin);
// получаем длину введённой строки lenstr = strlen(text);
// запрашиваем у пользователя ширину текста printf("\nEnter required width(%d...%d) of the text: ", lenstr, WIDTH); scanf("%d", &width); // корректируем её, если она выходит за пределы диапазона допустимых значений if(width > WIDTH) width = WIDTH; else if(width < lenstr) width = lenstr;
// выводим вспомогательную линейку для визуального контроля значений puts(""); for(i = 1; i <= width / 10; i++) printf("%10d", i); putchar('\n'); for(i = 1; i <= width; i++) printf("%d", i % 10); puts("\n");
// растягиваем строку Feathering(text, width);
// выходим из программы puts("\nPress any key to quit...\n"); getch();
return 0; }
// подсчёт слов и 'букв' в строке int Words(char* str, // строка int* alpha // счётчик 'букв' в строке ) { int count = 0; // обнуляем счётчик слов *alpha = 0; // обнуляем счётчик 'букв'
// пока не конец строки while(*str) { // пропускаем пробелы while(*str && isspace(*str)) str++;
// если не пробел, значит это начало слова, считаем его if(*str && !isspace(*str)) count++;
// пропускаем остальные буквы и подсчитываем их while(*str && !isspace(*str++)) (*alpha)++; }
// возвращаем количество слов в строке return count; }
// ф-ция растягивания строки void Feathering(char* str, // строка int len // длина, на которую растягиваем ) { int letters; // количество букв в строке int gaps; // количество промежутков между словами в строке int spaces; // количество необходимых пробелов int interval; // количество пробелов между словами int spacerem; // остаток пробелов, равномерно добавляемых к интервалам
gaps = Words(str, &letters) - 1; // вычисляем количество промежутков между словами spaces = len - letters; // общее количество необходимых пробелов interval = gaps ? spaces / gaps : 0; // если есть промежуток, значит есть у него размер spacerem = gaps ? spaces % gaps : 0; // пробелы для коррекции интервала while(*str) { while(*str && isspace(*str)) str++; // пробелы пропускаем while(*str && !isspace(*str)) putchar(*str++); // печатаем слово printf("%*c", interval + (spacerem-- > 0), ' '); // и интервал } putchar('\n'); } |
|