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

Ваш аккаунт

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

Последние темы форума

Показать новые сообщения »

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

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

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

81K
21 марта
ross_
12 / / 14.03.2017
Текст записан одной длинной строкой. Выровнять текст на экране
по правому краю, так что бы в каждой строке было 60 символов и
каждая строка заканчивалась знаком препинания или пробелом.
Выравнивание осуществить, вставляя дополнительные пробелы
между словами (равномерно по всей строке).
6
23 марта
@pixo $oft
3.4K / / 20.09.2006
Очень просто. Парсишь строку, сохраняя каждый раз позицию предыдущего слова. Если текущий символ в строке — знак препинания или пробел, проверяешь, меньше ли длина получившейся строки, чем 60. Если да, то продолжаешь, если нет, то обрезаешь по предыдущему слову и повторяешь всё заново, не забывая сбросить счётчик символов.
81K
23 марта
ross_
12 / / 14.03.2017
Цитата: @pixo $oft
обрезаешь по предыдущему слову и повторяешь всё заново

А куда копировать эту новую строку?

2.5K
24 марта
xit
2 / / 30.11.2006
Если на С++, то можно например, так решить данную задачу:
Код:
#include <iostream>
#include <cstring>

/*
Текст записан одной длинной строкой. Выровнять текст на экране
по правому краю, так что бы в каждой строке было 60 символов и
каждая строка заканчивалась знаком препинания или пробелом.
Помогите, как решить в строках?
*/


void printRightJustified(const char * str, int maxChars = 60) {
    int len = strlen(str);
    for (int b = 0, e = 0, t; b < len ; b = e) {
      // индекс последнего символа
      e = ( b + maxChars > len ) ? len : b + maxChars;
      // ищем символ, который удовлетворяет критериям окончания строки
      for ( t = e-1; t > b; --t) {
        if (ispunct(str[t]) || str[t] == ' ') break;
      }
      // если такой символ найден, то его индекс будет конечным для данной строки
      if (t > b) e = t+1;
      // печатаем пробелы
      for (int i = 0, w = maxChars-(e-b); i < w; ++i) std::cout << " ";
      // печатаем символы из строки
      for (int i = b; i < e; ++i) std::cout << str[i];
      std::cout << std::endl;
    }
}

int main()  {
    char str[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    printRightJustified(str, 30); std::cout << std::endl;
    printRightJustified(str, 60); std::cout << std::endl;
    printRightJustified(str, 90); std::cout << std::endl;
}
Результат выполнения:

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

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