Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 31.12.2019
Сообщений: 8

Ошибка в задаче

24.05.2020, 15:46. Показов 376. Ответов 0
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Решал задачу - https://www.e-olymp.com/uk/problems/2191
И вот:
Федя живе активним життям онлайн. Він легко шукає найскладніші реферати, використовуючи всесвітньо відомі пошукові машини, викачує музику і ділиться нею з друзями, він приєднався до багатьох популярних спільнот у Jевом Jурнале. І звичайно ж, він багато спілкується з інтернет-друзями по UCM (You Seek Me) - відомому чат-клієнті.

Федя навчається в школі. У школі вивчають українську мову. Одного разу вчителька задала домашнє завдання - написати не менше 10-15 фраз, використовуючи непряму мову.

Феді лінь переписувати стандартні фрази з шкільних підручників, він хоче мислити нестандартно. І ось у Феді блиснула оригінальна ідея - а чи не взяти кілька діалогів з його улюбленого UCM і чи не перекладати їх в непряму мову?

Ідея хороша, але, на жаль, Федя не вміє програмувати, так як його ще не вчили цьому в школі. Допоможіть йому!

Технічні умови

Вхідні дані: У вхідному файлі знаходиться роздруківка одного з діалогів по UCM. У першому рядку знаходиться повідомлення про те, що співрозмовник Феді увійшов з ним у контакт. Воно виглядає так:

ГГ: ММ: СС: <Ім'я> signed on

де ГГ: ММ: СС: - час, коли співрозмовник увійшов у контакт, <Ім'я> - ім'я співрозмовника, записане в трансліті (латинськими літерами). Будь-яке число у відображенні часу займає дві цифри, наприклад 9:00 43 хвилини 5 секунд буде виглядати як 9:43:05.

У кожному з наступних рядків (крім останнього рядка файлу) знаходиться репліка учасника діалогу. Якщо кожній репліці присвоїти її порядковий номер, то непарні репліки були вимовлені Федею, а парні - його співрозмовником.

Репліка знаходиться повністю на одному рядку і складається з мітки часу, смислової частини і розділового знаку в кінці речення.

Позначка часу має вигляд: ГГ: ХХ: СС:.

Смислова частина відокремлена від мітки часу пропуском і містить текст, що складається з великих або маленьких латинських літер, цифр, пробілів, апострофів, а також ком, крапок з комами і круглих дужок.

Розділовий знак - це знак оклику, знак питання або крапка. Він може бути опущений, в цьому випадку мається на увазі крапка.



Приклад репліки:

ГГ: ХХ: СС: Ya skazal etu frazu.

Останній рядок файлу має вигляд:

ГГ: ХХ: СС: <Ім'я> signed off

де <Ім'я> - ім'я все того ж співрозмовника.

Обсяг вхідного файлу не перевищує 20 кілобайт. Довжина кожного рядка не перевищує 250 символів.
Вхідні дані

У вхідному файлі знаходиться роздруківка одного з діалогов по UCM. У першому рядкуе знаходиться повідомлення про те, що співрозмовникФедораувійшовз ним уконтакт.Воно виглядаєтак:

ЧЧ:ММ:СС: <Ім'я> signed on

де ЧЧ:ММ:СС: - час, коли співрозмовник увійшов у контакт, <Ім'я> - ім'я співрозмовника, записане у трансліті (латинськими літерами). Довільне число у відображенні часу займає дві цифри, наприклад, 9 годин 43 хвилини 5 секунд буде виглядати як 09:43:05.

У кожному з наступних рядків (крім самого останнього рядкаи файлу) знаходиться репліка учасника діалогу. Якщо кожній репліці присвоїти її порядковий номер, то непарні репліки були сказані Федором, а парні - цого співрозмовником.

Репліка знаходиться повністю у одному рядку і складається з мітки часу, змістовної частини та розділового знаку в кінці речення.

Мітка часу має вид: ЧЧ:ММ:СС:.

Змістовна частина відокремлена від мітки часу пропуском і містить текст, який складається з великих або маленьких латинських літер, цифр, пропусків, апострофів (заміняють мягкий та твердий знаки у трансліті), а також ком, крапок з комами і круглих дужок.

Розділовий знак - це знак оклику, знак питання або крапка. Він може бути пропущений, у цьому випадку розуміється крапка.

Приклад репліки:

ЧЧ:ММ:СС: Ya skazal etu frazu.

Останній рядок файлу має вид:

ЧЧ:ММ:СС: <Имя> signed off

де <Ім'я> - ім'я все того ж співрозмвоника.

Об'єм вхідного файлу не перевищує 20 кілобайт. Довжина кожного рядка не перевищує 250 символів.

Вихідні дані

Виведіть у вихідний файл для кожної репліки її ж, перетворивши у непряму мову.

Перетворення полягає у наступному. Спочатку візьміть репліку у подвійні лапки, при цьому якщо вона завершується на крапку, то замість крапки поставте кому, інакше залишіть розідловий знак без змін, наприклад:

Zakanchivayu tochkoi. → "Zakanchivayu tochkoi,"

Eto voskhititel'no! → "Eto voskhititel'no!"

Потім поставте пропускл, три знаки "-" (тире) і знову пропуск, після чого виведіть слово "skazal" і ім'я співромовника, який промовив цю репліку. Після імені виведіть крапку. Федя пишеться як "Fedya", ім'я його співрозмвоника можна взнати з першого рядка вхідного файлу.

Вроде бы все продумал, но есть ошибки в парочки тестах.
Вот код:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const char inputf[] = "input.txt";
const char outputf[] = "output.txt";

class Phrase
{
private:
string name;
string messege;
public:
Phrase(): name("Fedya"), messege("") {}

void setName(const string& str)
{
string name;
for (int i = str.find(": ") + 2; i < str.length(); i++)
{
if (str[i] == ' ')
break;
name += str[i];
}
this->name = name;
}

void setMessage(const string& str)
{
int index = str.find(": ") + 2;
messege = str;
messege.erase(0, index);
index = messege.length() - 1;
if (messege[index] == '!' || messege[index] == '?' || messege[index] == ',' || messege[index] == ';')
return;
else
{
if (messege[index] == '.')
messege[index] = ',';
else
messege.push_back(',');
}
}

string getName()
{
return name;
}

string getMessage()
{
return messege;
}
};

int main()
{
fstream inf;
fstream outf;
char p = ' ';

Phrase people[2];
string temp;

int count_messege = 0;
int turn;

inf.open(inputf, fstream::in);
outf.open(outputf, fstream::out);

while (!inf.eof() && p != '\n')
{
p = ' ';
inf.get(p);
if(p != '\n')
temp += p;
}
people[1].setName(temp);
temp = "";

while (!inf.eof())
{
if (count_messege % 2 == 0)
turn = 0;
else
turn = 1;

p = ' ';
inf.get(p);
if (p == '\n')
{
if (temp.find("signed off") != -1)
break;
else if (temp == "")
continue;
people[turn].setMessage(temp);
outf << '"' << people[turn].getMessage() << '"' << " --- skazal " << people[turn].getName() << '.' << endl;
temp = "";
count_messege++;
}
else
temp += p;
}


inf.close();
outf.close();
return 0;
}
Большое спасибо)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.05.2020, 15:46
Ответы с готовыми решениями:

Ошибка в задаче
Задание написать функцию двух параметров, которая устанавливает должна ли первая фамилия располагаться выше второй. #include...

Ошибка в задаче
Требуется посчитать сумму целых чисел, расположенных между числами 1 и N включительно. Входные данные В единственной строке...

Ошибка в задаче
Паскаль выдает следующую ошибку 12 строка Переменная цикла for должна описываться в том же блоке, что и цикл for Program...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.05.2020, 15:46
Помогаю со студенческими работами здесь

Ошибка в задаче
Заданы моменты начала и конца некоторого промежудка времени в часах минутах и секундах ( в пределах одних суток) Найти продолжительность...

Ошибка в задаче
Помогите пожалуйста с задачей, препод дает пример, а он в GPSS World выдает ошибку: 05/06/13 15:59:57 Model Translation Begun. ...

Ошибка в задаче
исправьте пожалуйста ошибку в коде задачи: uses crt; const n=8; var a,b:arrayof integer; i,j,maxi:integer; p:boolean; begin ...

Ошибка в задаче
Условие: Организовать цепочку динамических структуры содержащую действительные числа и добавит с клавиатуры число между максимальным и...

Ошибка в задаче
Помогите найти ошибку в задании! static void CountNum(string s) { int k = 0; for (int i = 0; i &lt;...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru