Форум программистов, компьютерный форум CyberForum.ru

Ограничение ширины строки при выводе в консоль - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 11:09     Ограничение ширины строки при выводе в консоль #1
Класс выводит строку в консоли.
Как сделать, чтобы ширина выводимых строк была равна characterWidth = 40,
т.е. после 40 символов был перенос на новую строку?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
 
class StringProcessing {
  public:
      StringProcessing() : characterWidth(40),
                     textToBeFormatted("NULL") {}
      
      inline void StringProcessing::initString() {
          textToBeFormatted =
              "text    some text   some text some text   some text some text"
              "text some text  some text    some text some text some text"
              "text    some      text some    text some   text some text some text"
              "text some  text some    text some    text some text some text"
              "text   some     text some text some   text some text some text";
      }
 
      inline void displayString()
        { std::cout << textToBeFormatted << std::endl; }
  private:    
      int characterWidth;
      std::string textToBeFormatted;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 14:01  [ТС]     Ограничение ширины строки при выводе в консоль #21
Цитата Сообщение от Ilot Посмотреть сообщение
А вы С++ по чем учили? Мне после Лафоре впринципе по большей части все понятно.
Да я тоже по Лафоре, Страуструпу. Купил Седжвика, все никак не осилю, уж очень он сложный
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.10.2013, 14:10     Ограничение ширины строки при выводе в консоль #22
Я бы сделал как-то так. Не очень красиво конечно, можно сделать лучше. Использую допущение, что слова разделяются только пробелом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class StringProcessing 
{
  public:
      StringProcessing() : characterWidth(40),
                     textToBeFormatted("NULL") {}
      
      inline void initString() {
          textToBeFormatted = "text    some text   some text some text   some text some text"
              "text some text  some text    some text some text some text"
              "text    some      text some    text some   text some text some text"
              "text some  text some    text some    text some text some text"
              "text   some     text some text some   text some text some text";
      }
 
      inline void displayString()
      {
         const std::string& s = textToBeFormatted;
         const int& width = characterWidth;
         for (int current = 0; current < s.length();)
         {
            if (s.length() < width)
            {
               output(s);
               break;
            }
            if (s.length() - current < width)
            {
               output(s.substr(current));
               break;
            }
            std::string substr = s.substr(current, width);
            current += width;
            size_t space = substr.rfind(' ');
            if (space != std::string::npos && (substr[width - 1] != ' ' &&
               (s.length() > current && s[current] != ' ')))
            {
               current -= width - space - 1;
               substr = substr.substr(0, space + 1);
            }
            output(substr);
         }
      }
  private:
      inline void output(const std::string& s)
      {
         std::cout << std::setfill(' ') << std::right << std::setw(characterWidth) << s << std::endl;
      }
      int characterWidth;
      std::string textToBeFormatted;
};
http://ideone.com/pK0str
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 14:22     Ограничение ширины строки при выводе в консоль #23
ForEveR, сразу вопрос:
C++
1
2
const std::string& s = textToBeFormatted;
const int& width = characterWidth;
Это вы сделали что бы не случайно не изменить поля класса. А не лучше ли в таком случае сделать ф-ю константной?
C++
1
      inline void displayString() const
p.s. Мне кажется компилятор проигнорирует встаивание....
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.10.2013, 14:25     Ограничение ширины строки при выводе в консоль #24
Ilot, Скорее проигнорирует. Нет, я сделал это для того, чтобы мне было удобнее писать честно говоря. Можно сделать и константной (скорее даже нужно).
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.10.2013, 14:35     Ограничение ширины строки при выводе в консоль #25
ForEveR, так ведь метод определенный непосредственно в классе - неявно встраиваемый. inline не нужен.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
31.10.2013, 14:42     Ограничение ширины строки при выводе в консоль #26
Я конечно не силен в STL и вместо программы попробую описать алгоритм как я это вижу. В STL вроде должна быть функция у string под название split которая должна возвращать list <string> кажется так. У каждого слова есть своя длина. Потом нужно пройтись по этому списку возвращая длину каждого слова и плюс 1 на пробел, когда длина следующего слова будет больше 40, то что накопилось, предположим 36, получаем 4 пробела нужно добавить и добавляем их в нужные места.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 14:42     Ограничение ширины строки при выводе в консоль
Еще ссылки по теме:

C++ Мусор при выводе не смотря на \0 символ в конце строки
C++ Теряется часть информации при выводе в консоль
Кириллица в выводе на консоль C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 14:42     Ограничение ширины строки при выводе в консоль #27

Не по теме:

Скорее всего, это просто привычка.



Split есть в C#. В STL его нет.
Yandex
Объявления
31.10.2013, 14:42     Ограничение ширины строки при выводе в консоль
Ответ Создать тему
Опции темы

Текущее время: 05:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru