• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Проблема с одной функцией для разбора строк, язык С/С++

[Федя]

Ученик
Регистрация
7 Янв 2011
Сообщения
2
Реакции
0
Баллы
0
Проблема с одной функцией для разбора строк, язык С/С++

В общем передо мной стоит задача реализовать прогу которая читает как бы 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 отдельные единицы (слова или группы слов в кавычках) введенной строки в буфер
paste.org.ru - полностью прога
paste.org.ru - прога с отдельной функцией

Буду очень благодарен всем кто хоть чем то поможет.
 
Назад
Сверху