|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.01.2011, 20:03 | #1 |
Новичок
Джуниор
Регистрация: 07.01.2011
Сообщений: 3
|
У меня проблема с одной из моих функций для разбора строки, язык С/С++
В общем передо мной стоит задача реализовать прогу которая читает как бы unix команду из командной строки и относит ее отдельные части (слова) к четырем типам
1 - собственно сама команда 2 - параметры команды 3 - ключи 4 - параметры ключей Ее надо реализовать с использованием конечного автомата. я это сделал (правильно ли - другой вопрос, но сейчас не об автоматах пойдет речь). У меня проблема с одной функцией, на первый (мой) взгляд тривиальнейшей, но она не работает так как считает, что первый пробел между словами - это NULL символ. В общем прога в целом у меня достаточно большая, но я вкратце объясню - есть функция (та самая проблемная) BufferWriter, на каждом ее прогоне, она должна заносить из введенной команды в буфер (массив) отдельные *единицы* этой командной строки, это либо одно слово отделенное от других пробелами, либо несколько слов если они заключены в кавычки (заносит все слова внутри кавычек + сами кавычки). За один её вызов она заносит одну из таких единиц в буфер, а когда её вызываешь снова она буфер очищает и опять заносит туда следующие единицы. Потом автомат этот буфер читает, но это уже не важно для вопроса. В общем BufferWriter должна игнорировать пробелы до первого символа слова, затем, как только встречает символ не-пробел, начинает все это заносить в буфер по одному символу, пока не встретит пробел (при условии что не было кавычек, если были кавычки, она останавливается когда найдет вторую, закрывающую кавычку), а как только встречает пробел останавливается. На следующем вызове функции она очищает буфер и продолжает с места, на котором остановилась. Вся проблема в том что когда она находит пробел она думает что это не символ пробела а NULL символ. Плюс к тому я еще использую функцию isspace() (ctype) которая по идее должна возвращать 0 когда видит символ не-пробел, и возвращает не ноль когда видит пробел. Но она на пробел который я ввожу возвращает 0... В общем я не очень пойму как сделать так что бы эта функция адекватно реагировала и на пробел и на не-пробел и на NULL символ. NULL символ мне тоже надо распознавать, так как с ним связано несколько флагов важных для автомата, т.е. все флаги должны в функции работать как задумано Чего надо добиться: Если есть строка: wh "hg ds nu" mn dwe "wde" и есть 5 вызовов функции BufferWriter, то при первом вызове функции, в буфере оказалось - wh при втором вызове функции, в буфере оказалось - "hg ds nu" при третьем вызове функции, в буфере оказалось - mn при четвертом вызове функции, в буфере оказалось - dwe при пятом вызове функции, в буфере оказалось - "wde" при этом неважно, сколько пробелов между словами в общем вот две ссылки, в первой ссылке программа полностью (с автоматом у меня там тоже косяки но пока не так важно), во второй программа реализующая отдельно функцию BufferWriter () которая должна занести 4 отдельные единицы (слова или группы слов в кавычках) введенной строки в буфер http://paste.org.ru/?3zw6sm - полностью прога http://paste.org.ru/?zkfvez - прога с отдельной функцией Буду очень благодарен всем кто хоть чем то поможет. Последний раз редактировалось [Федя]; 07.01.2011 в 20:05. |
07.01.2011, 21:04 | #2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
написал много, понятного мало. код страшен. опиши нормально задание с примером, входящими и исходящими данными
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
07.01.2011, 21:54 | #3 |
Пользователь
Регистрация: 06.01.2011
Сообщений: 11
|
Много воды и не нужных слов. Но задача вполне нормально описана. Есть пример входных и выходных параметров. Читайте внимательнее!
|
07.01.2011, 22:14 | #4 |
Новичок
Джуниор
Регистрация: 07.01.2011
Сообщений: 3
|
Задание:
Входные данные: Строчка из нескольких слов, разделенных минимум одним пробелом. Слова составлены из любых символов таблицы ASCII. Пример: htr rgv sdk Слова могут быть записаны внутри кавычек. Назовем это группой слов. Пример: htr rgv sdk "hgt eed jtr" При i-том вызове, функция BufferWriter должна занести в массив Buffer i-тое введенное слово или группу слов. 1 <= i <= n n равно количеству введенных слов и групп слов Выходные данные: Вывод на экран содержимого массива Buffer после каждого вызова функции BufferWriter Пример: Входные данные: htr rgv "hgt eed jtr" (n=3) Выходные данные: i==1, Buffer == htr i==2, Buffer == rgv i==3, Buffer == "hgt eed jtr" Прошу прощения за словоблудие Последний раз редактировалось [Федя]; 07.01.2011 в 22:40. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Лабораторная по СИ. Строки и использование библиотечных функций для их обработки | Андрей89 | Помощь студентам | 0 | 08.12.2009 13:11 |
Несколько функций в одной процедуре? | nePirat | Помощь студентам | 2 | 04.05.2009 11:42 |
Сложная проблема (для меня) | Zikr | Microsoft Office Excel | 5 | 16.04.2009 16:16 |
Программирование алгоритмов циклической структуры для задач табулирования функций одной переменной с пост | bbk_serg | Помощь студентам | 1 | 10.01.2009 18:16 |
Нужна программа для грамматического разбора конструкции гипотетического языка программирования | loshara_de_kontara | Помощь студентам | 0 | 10.12.2008 23:20 |