Помогите с задачей на C

Текст записан одной длинной строкой. Выровнять текст на экране
по правому краю, так что бы в каждой строке было 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] == ' ')
                kp++;//увеличиваем количество пробелов
            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");
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.