Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

81K
09 апреля 2017 года
ross_
12 / / 14.03.2017
Необходимо выровнять строку на экране по ширине, равномерно вставляя пробелы между словами, таким образом, чтобы в каждой строке было по 60 символов и строка обязательно заканчивалась знаком препинания или пробелом.
Есть не рабочий код, прошу помочь.
Код:
#include <stdio.h>
#include <string.h>
#include <windows.h>

void main()
{
    char str[200], str1[70];
    char *start, *p;
    char raz[] = " .,?!;:-";
    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] = '';//заканчиваем новую строку
        strcpy(str, str + (i + 1));//копируем хвост в начало старой строки
        while (strlen(str1) < 60)//работаем с новой строкой
        {
            start = str1;//начало строки
            z = 2;
            while (str1[a] != '')//пока не достигнем конца строки
            {
                if (str1[a] != ' ')
                    a++;//увеличиваем количество пробелов
                else
                    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");
}
392
10 апреля 2017 года
cronya
421 / / 03.01.2009
приведите пример на строковых значения, как бы вы записали это на листе бумаге, не совсем понятна задача.
81K
10 апреля 2017 года
ross_
12 / / 14.03.2017
Цитата: cronya
приведите пример на строковых значениях

Есть какая-то вбиваемая строка из 60+ символов. И пока строка будет больше 59 символов, нужно найти первый знак препинания или пробела начиная с 59 символа и копировать эту часть в новую строку. Затем в новой строке необходимо найти количество пробелов между всеми словами и в цикле вставлять туда новые пробелы, сдвигая последний символ строки, пока в новой строке не будет 60 символов.
Допустим вот наша строка:
Необходимо выровнять строку на экране по ширине, равномерно вставляя пробелы между словами, таким образом, чтобы в каждой строке было по символов и строка обязательно заканчивалась знаком препинания или пробелом.
Мы копируем эту часть "Необходимо выровнять строку на экране по ширине, " и в дальнейшем уже работаем с ней, вставляем пробелы между словами, и так в цикле, пока строка не закончится

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог