Форум программистов, компьютерный форум 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;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.10.2013, 11:13     Ограничение ширины строки при выводе в консоль #2
dimakozyr, Никак. Руками только.
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 11:20     Ограничение ширины строки при выводе в консоль #3
C++
1
2
for(int i = 0; i < s.length()/40 + (bool)(s.length()%40);i++)
   cout<< s.substr(i*40,40)<<endl;
Примерно так.
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 11:30  [ТС]     Ограничение ширины строки при выводе в консоль #4
Цитата Сообщение от eocron Посмотреть сообщение
Примерно так.
Ээ.. и это все? Очень странно, но работает
Просто это тестовое задание в крутую фирму

Добавлено через 1 минуту
А как здесь сделать выравнивание текста по заданной ширине (40 символов)?
Т.е. добавить пробелы, где это необходимо
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.10.2013, 11:34     Ограничение ширины строки при выводе в консоль #5
Что-нибудь типа

C++
1
2
3
4
5
6
7
8
      inline void displayString()
      {
         const std::string& s = textToBeFormatted;
         for (int i = 0; i < s.length() / 40 + (bool)(s.length() % 40); ++i)
         {
            std::cout << std::left << std::setfill(' ') << std::setw(40) << s.substr(i * 40, 40) << std::endl;
         }
      }
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 11:40  [ТС]     Ограничение ширины строки при выводе в консоль #6
А можно как-то сделать, чтобы слова не обрезались?
Миниатюры
Ограничение ширины строки при выводе в консоль  
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 11:42     Ограничение ширины строки при выводе в консоль #7
Это так сразу не напишу, конечно, но я бы сделал в лоб: массив из слов и всякие манипуляции с максимальной выборкой из это массива.

Не по теме:

что за фирма?

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.10.2013, 11:56     Ограничение ширины строки при выводе в консоль #8
dimakozyr, Т.е. еще и переносы замутить? Однако.) Может сами попытаетесь сделать?
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 11:58  [ТС]     Ограничение ширины строки при выводе в консоль #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Может сами попытаетесь сделать?
Да уже пытаюсь
SatanaXIII
31.10.2013, 12:02
  #10

Не по теме:

dimakozyr, а вы потом часть зарплаты на развитие форума отдавайте.

Tulosba
31.10.2013, 12:03
  #11

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Т.е. еще и переносы замутить?
Еще и на слога разбивать. Хотя в русском языке вроде как разрешили переносить в любом месте слова.
Цитата Сообщение от eocron Посмотреть сообщение
что за фирма?
Наверное MS решила написать новый блокнот с продвинутым режимом "word wrap"

SatanaXIII
31.10.2013, 12:11
  #12

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Хотя в русском языке вроде как разрешили переносить в любом месте слова.
Действительно?
А где такое можно почитать?

Tulosba
31.10.2013, 12:22
  #13

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Действительно?
А где такое можно почитать?
Черт его знает. Слышал пару лет назад от знакомого издателя. Может пошутил, конечно.

Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 12:48     Ограничение ширины строки при выводе в консоль #14
Понимаю, что проблема решена, но я долго мучался что бы написать более менее приличный код без лишних циферок и введения дополнительных переменных. Так что прошу сильно не бить если что не так.
C++
1
2
3
4
5
6
7
8
9
10
void displayString()
{
    string::iterator strIter = textToBeFormatted.begin();
    while(strIter!= textToBeFormatted.end())
    {
        cout.put(*strIter++);
        if (!((strIter - textToBeFormatted.begin()) % characterWidth))
            cout.put('\n');
    }
}
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 13:06  [ТС]     Ограничение ширины строки при выводе в консоль #15
Цитата Сообщение от Ilot Посмотреть сообщение
Понимаю, что проблема решена, но я долго мучался что бы написать более менее приличный код без лишних циферок и введения дополнительных переменных. Так что прошу сильно не бить если что не так.
Прикольно, все работает
Но она еще не решена, я сейчас мучаюсь, чтоб слова не обрезались
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 13:32     Ограничение ширины строки при выводе в консоль #16
Цитата Сообщение от dimakozyr Посмотреть сообщение
Прикольно, все работает
Но она еще не решена, я сейчас мучаюсь, чтоб слова не обрезались
Да как два пальца (только без промежуточных итераторов здесь не обойтись):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    void displayString()
    {
        string::iterator strIter = textToBeFormatted.begin();
        string::iterator temp = strIter;
        while(strIter!= textToBeFormatted.end())
        {
            cout.put(*strIter++);
            if (!((strIter - temp) % characterWidth))
            {
                while((*strIter != ' ' )
                        &&(strIter!= textToBeFormatted.end()))
                    cout.put(*strIter++);
                temp = strIter;
                cout.put('\n');
            }
        }
    }
Добавлено через 4 минуты
p.s. Проблема только с пробелами. Вопрос в том нужно ли инрементировать итератор или нет, но это уже зависит от того как вам нужно. Однако это решается просто (при условии, что пробел один):
C++
1
temp = ++strIter;
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 13:35  [ТС]     Ограничение ширины строки при выводе в консоль #17
Цитата Сообщение от Ilot Посмотреть сообщение
Да как два пальца (только без промежуточных итераторов здесь не обойтись):
Да, круто. Осталось доделать выравнивание по ширине, но это уже не так сложно
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 13:41     Ограничение ширины строки при выводе в консоль #18
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да, круто. Осталось доделать выравнивание по ширине, но это уже не так сложно
Благодарю. Четвертый день изучаю STL .
Мне интересно мнение опытных программистов. Сойдет ли такой код при приеме на работу или все-таки он пока корявый?
dimakozyr
 Аватар для dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
31.10.2013, 13:45  [ТС]     Ограничение ширины строки при выводе в консоль #19
Цитата Сообщение от Ilot Посмотреть сообщение
Четвертый день изучаю STL .
Четвертый? Я уже 100 страниц Мюссера прочитал, но до сих пор не шарю

Цитата Сообщение от Ilot Посмотреть сообщение
Сойдет ли такой код при приеме на работу или все-таки он пока корявый?
Вполне, крутой код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2013, 13:55     Ограничение ширины строки при выводе в консоль
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Ilot
31.10.2013, 13:55     Ограничение ширины строки при выводе в консоль
  #20

Не по теме:

Цитата Сообщение от dimakozyr Посмотреть сообщение
Четвертый? Я уже 100 страниц Мюссера прочитал, но до сих пор не шарю
Ну так у него основной материал начинается где-то с 5й главы. Так что пока не познакомитесь с алгоритмами не фига не будет понятно.
А вы С++ по чем учили? Мне после Лафоре впринципе по большей части все понятно. Вот только сегодня утром поздно проснулся не успел почитать, а на работе вникнуть не получается. Обычно на работе я пишу код, а дома читаю. А тут такая засада...

Yandex
Объявления
31.10.2013, 13:55     Ограничение ширины строки при выводе в консоль
Ответ Создать тему
Опции темы

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