![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| MrImho |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.7.2009 Репутация: нет Всего: нет |
Здравствуйте. Недавно стал изучать программирование. И вот стал вопрос о создании системы диалогов как в Gothic или Risen. Я убрал все функции рендера оставив только консольную программу чисто реализующую эту функции. Что она должна делать: Парсить текстовый файл вида (извеняюсь за английский плохо знаю):
Имя файла "test", содержание:
Где первое число до "|" идентификатор персонажа, число после "|" и до ":" идентификатор текста диалога данного персонажа. Дальше первая его фраза до "@", а после возможные ответы до "->" после и до "@" идентификатор текста диалога данного персонажа. Если перед текстом стоит "f-" то надо запустить функцию с последующим названием. Вот что сейчас мне удалось сделать:
Этот код выводит первые слова персонажа с идентификатором 2, как сделать чтобы, он посчитал кол-во ответов и вывел их на экран: 1 - первый ответ 2 - второй ответ 3 - третий ответ И пользователь нажав цифру 3 и enter заставил бы выполнится функцию end(), т.к. в исходном файле написано: 2|3:f-end Честно, мне в голову ничего не приходит, опыта программирования в c++ маловато. Буду признателен, тому кто поможет. Это сообщение отредактировал(а) MrImho - 1.11.2009, 00:49 |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
MrImho
1. Опиши структуру которая и будет представлять распарсенную строку. 2. Распарсь строку и помести результат в структуру. 3. все остальные действия. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Могу предложить ответ на вопрос о вызове функции.
Если я правильно понял, то задача заключается в том, чтобы имея строковое представление имени функции вызвать ее. Преложенное мной решение основано на использовании динамического полиморфизма для классов-функторов совместно с отображением контейнера map. Если моё решение покажется кому-нибудь слишком сложным, то очень прошу подсказать возможность сделать это попроще (без switch
Это сообщение отредактировал(а) sdukshis - 1.11.2009, 16:29 |
|||
|
||||
| MrImho |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.7.2009 Репутация: нет Всего: нет |
sdukshis Да Вы правы я даже не представлял как вызвать функцию имея её имя. ООП в с++ я плохо знаю, но понял что Вы имели ввиду благодарю за помощь. И если Вас не затруднит не могли бы Вы пояснить назначение строки:
Вот как я понял эту строку: Мы задаём новый класс переменной map, эта переменная строковая, использует класс Functor_Interface и этот класс переменной называется Actions. Эта строка как я понял использует шаблон (template). Шаблоны так и остались для меня загадкой, прочитал несколько книг по с++, но так и не "въехал" для чего они. Правда книги на английском читал, который плохо знаю. В 2 словах можете про них рассказать? Просто я не хочу в слепую использовать Ваш код, а хочу понять, как работает, чтобы в будущем не возникало вопросов. 50% задачи решена. Теперь остался парсинг (я его тоже плохо делаю, ведь я только недавно окунулся в мир прикладного программирования) andrew_121 Вы не могли бы подсказать какая функция считает вхождения символа в строке? Мне нужно узнать кол-во знаков "@" и циклом выполнить операцию. Если Вас не затруднит, Вы можете дать список основных функций, которые парсят текст. Я тогда смогу попробовать написать уже конечную программу, с парсингом и запуском нужных функций. Спасибо всем кто откликнулся, особая благодарность sdukshis я Вам рейтинг поднял (наверху на 3 звёздочку килкнул - думаю "это есть хорошо", здесь на форуме |
|||
|
||||
| sdukshis |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Объявление нового типа Actions (просто везде вставлять конструкцию map<string, Functor_Interface* > на мой взгляд некрасиво)
Если действительно в 2-х словах то шаблоны это полиморфизм времени компиляции, но что бы нормально понять эту фразу надо побольше о них почитать (например у Страуструпа в книге "Дизайн и эволюция С++") Это сообщение отредактировал(а) sdukshis - 3.11.2009, 00:44 |
||||||
|
|||||||
| MrImho |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 31.7.2009 Репутация: нет Всего: нет |
sdukshis Благодарю за разъяснение и за название книжки, поищу и скачаю.
Но вот с парсингом ни как не разберусь, вообщем не нашёл функции поиска символа, поэтому сделал свою, вот что сейчас имеется:
Но тут происходит непонятная вещь, если не объявлять переменную dd то число символов показывает постоянно разное (что-то вроде 345456 или 5467567). Что за чудо не знаю. И когда у меня есть кол-во ответов, не получается их вывести, просто я запутался если честно (даже стыдно об это говорить, на таком элементарном и запутался). Если кто поможет буду благодарен. |
|||
|
||||
| just_geek |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 13.12.2007 Репутация: 2 Всего: 10 |
А ты не пробовал, все целочисленные переменные после объявления иницализировать ? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |