• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Выровнять строку на экране по ширине

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");
}
 
Добавил код.
Ахтунг!!! Не работает с Русским текстом, а также нет защиты от дурака.
 

Вложения

  • lab.txt
    lab.txt
    2,4 КБ · Просмотры: 632
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD