Проблема с одной функцией для разбора строк, язык С/С++
В общем передо мной стоит задача реализовать прогу которая читает как бы 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 - прога с отдельной функцией Буду очень благодарен всем кто хоть чем то поможет. |
Часовой пояс GMT +4, время: 11:53. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.