R
ramrem
Необходимо выровнять строку на экране по ширине, равномерно вставляя пробелы между словами, таким образом, чтобы в каждой строке было по 60 символов и строка обязательно заканчивалась знаком препинания или пробелом. Вот свои наработки, но код не закончен и не работает даже для первого случая.
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>
void main()
{
char str[200], str1[70];
char *start, *p;
char raz[] = " .,?!;:-\0";
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите текст:\n");
gets_s(str);
int i , z, j, k, a=0, kp;
while (strlen(str) > 59)//пока длина строки больше 59
{
i = 59;
kp = 0;//количество пробелов
str1 == " ";//очищение строки
while (strchr(raz, str[i]) == NULL);//пока не найдем разделитель
{
i--;//двигаемся к началу
}
strncpy(str1, str, i);//копируем 59 символов в новую строку
str1[i+1] = '\0';//заканчиваем новую строку
strcpy(str, str + (i + 1));//копируем хвост в начало старой строки
while (strlen(str1) < 60)//работаем с новой строкой
{
start = str1;//начало строки
z = 2;
while (str1[a] != '\0')//пока не достигнем конца строки
{
if (str1[a] != ' ')
a++;//увеличиваем количество пробелов
else
kp++;
a++;
p = strchr(start, ' ');//первый пробел от начала строки
if (p == NULL)//если пробела нет
{
start = str1;//начинаем заново и увеличиваем z
z++;//количество пробелов между словами
}
j = p - str1;//позиция пробела
for (k = strlen(str1); k > j; k--)//сдвиг
str1[k] = str1[k - 1];//сдвигаем символ на предыдущий
kp--;//уменьшаем количество пробелов
if (kp == 0)//если пробелы закончились
break;//прерываем цикл
else//если пробелы не закончились
start = p + z;//начинаем с последнего пробела в начале строки
}
printf("Ровный текст:\n");
puts(str1);
}
}
system("pause");
}