Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 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
pproger вне форума Ответить с цитированием
Старый 07.01.2011, 21:54   #3
Flyasd1
Пользователь
 
Регистрация: 06.01.2011
Сообщений: 11
По умолчанию

Много воды и не нужных слов. Но задача вполне нормально описана. Есть пример входных и выходных параметров. Читайте внимательнее!
Flyasd1 вне форума Ответить с цитированием
Старый 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.
[Федя] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная по СИ. Строки и использование библиотечных функций для их обработки Андрей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