15.10.2018, 19:16 [+3 UTC]
в нашей команде: 3 010 чел. | участники онлайн: 8 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.51 (29.09.2018)

Общие новости:
24.09.2018, 16:49

Форум:
14.10.2018, 19:20

Последний вопрос:
15.10.2018, 18:48

Последний ответ:
15.10.2018, 14:45

Последняя рассылка:
15.10.2018, 16:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
06.02.2010, 18:35 »
Кадынцев Валерий Васильевич
Я понял, спасибо Вам! [вопрос № 176490, ответ № 259260]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 131
solowey
Статус: Студент
Рейтинг: 71
Андрей Кузнецов aka Dr_Andrew
Статус: Старший модератор
Рейтинг: 23

Перейти к консультации №:
 

Консультация онлайн # 187824
Раздел: • С / С++
Автор вопроса: Антон
Отправлена: 22.04.2014, 16:36
Поступило ответов: 1

Здравствуйте!
Нужна срочная помощь по решению этой лабы! Вся надежда на вас! smile
У меня возникли сложности с таким вопросом:
Из входного потока вводится произвольное число строк. Длинна строки не ограничена. Каждая строка представляет собой последовательность слов, разделенных одним или несколькими пробелами и/или знаками табуляции. Строка представлена списком (первое поле элемента списка - символ строки; второе- указатель на следующий элемент списка или NULL в конце списка). Конец ввода определяется концом файла.

Для каждой строки сформировать новую строку, составленную из последних букв каждого слова исходной строки. В полученной строке слова разделять только одним пробелом. Полученную строку вывеси в выходной поток.

Примечания:
1. Для ввода строк неопределённой длины посимвольный ввод не использовать!
2. Логически законченные части алгоритма решения задачи должны быть оформлены отдельными функциями с параметрами (например, ввод строки - списка, вывод списка, пропуск разделителей и др.).
3. Целесообразно обработку строки оформить отдельной функцией: структура программы должна быть следующей: пока не обнаружен конец файла {ввести строку, представленную списком; обработать список в соответствии с условием задачи; вывести результат; освободить память, выделенную под список}.
4. Новый список формировать, модифицируя исходный список.

Добавить комментарии по коду. Огромное спасибо!

Состояние: Консультация закрыта

Ответ # 272741 от Сандров Алекс

Здравствуйте, Антон!

я сделал 2 класса, CNode - для одного узла с одним сиволом и указателем на следующий узел
CSentence - для содержания листа узлов и работы с ними

Основная функция main()
Логически законченные части алгоритма оформлены отдельными методами в классе CSentence и идут по очереди в main

Чтобы сильно не усложнять, я всё сделал в одной строке. Но при выводе учитываются символы превода строк и знаки пунктуации.
Учёт того, что нужно пропустить при разборе есть в условии:

if(strchr("\n:,.!?", pNodeNext->Char()))

т.е. тут не считаются частями слова: символ новой строки, двоеточие, запятая, точка, восклицательный и вопросительный знаки.

В функции main закомментирована зачитка из файла, вставлена зачитка из строки. Нужно закомментировать зачитку из строки, раскомментировать зачитку из файла и написать там своё имя файла

Проект сделан в MS Visual studio 6.0, как консольное приложение

Приложение:


Консультировал: Сандров Алекс
Дата отправки: 25.04.2014, 10:35

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 187824

Посетитель

ID: 397161

# 1

= общий = | 22.04.2014, 19:43 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Экспертам раздела:

Компилирую в линуксе

Сергей Бендер
Профессионал

ID: 304622

# 2

= общий = | 23.04.2014, 00:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Что-то как-то мудрено. Что значит "строка представлена списком"? Если посимвольный ввод не использовать, то какой использовать (для неоганиченной строки")?


Посетитель

ID: 181465

# 3

= общий = | 23.04.2014, 06:02 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

списком - т.е. не кусок памяти, как обычно, а связанный список, где данные одного элемента - символ.

© Цитата: Сергей Бендер
Если посимвольный ввод не использовать, то какой использовать (для неоганиченной строки")?

там по тексту: "Конец ввода определяется концом файла.", т.е. читаем строку из файла


Посетитель

ID: 181465

# 4

= общий = | 23.04.2014, 06:04 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Тут вот какой момент непонятен: "Для каждой строки сформировать новую строку, составленную из последних букв каждого слова исходной строки. В полученной строке слова разделять только одним пробелом."

Т.е. "Мама мыла раму." превращается в "а а у."?


Посетитель

ID: 397161

# 5

= общий = | 23.04.2014, 07:55 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Да, все верно. Причем между словами может стоять несколько табуляций и/или пробелов. А в полученной строке буквы должны разделяться только 1 пробелом "

• Отредактировал: [неизвестный]
• Дата редактирования: 23.04.2014, 07:57


Посетитель

ID: 181465

# 6

= общий = | 23.04.2014, 08:20 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

А какой-нить код есть уже? Или вообще пусто? smile


Посетитель

ID: 397161

# 7

= общий = | 23.04.2014, 08:59 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Пустой smile smile


Посетитель

ID: 181465

# 8

= общий = | 23.04.2014, 09:13 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

ну если никто до завтра-послезавтра не возьмётся, я посмотрю


Посетитель

ID: 397161

# 9

= общий = | 08.05.2014, 09:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер


вот такое при компиляции


Посетитель

ID: 181465

# 10

= общий = | 08.05.2014, 09:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

это warning компилятора, ничего страшного, это он пугается, что константную строку передают в функцию, которая по описанию работает с переменными(строками).
Можно в коде заменить

void Create(char*pString);

на

void Create(const char*pString);

и

void CSentence::Create(char*pString)

на

void CSentence::Create(const char*pString)


Посетитель

ID: 397161

# 11

= общий = | 08.05.2014, 12:14 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

теперь при раскомментировании зачитку из файла:

и повторной конмиляции он пишет это :


Посетитель

ID: 181465

# 12

= общий = | 08.05.2014, 12:27 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

тоже самое, добавить const перед char* тут:

void CreateFromFile(char* pFileName);
void CSentence::CreateFromFile(char* pFileName)

а сама программа-то собирается? Несмотря на warning-и она должна собираться и работать. Или GCC не собирает бинарник при warning-ах?

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.40903 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.51 от 29.09.2018