20.02.2020, 04:37 [+3 UTC]
в нашей команде: 4 220 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.81 (18.02.2020)
JS-v.1.35 | CSS-v.3.37

Общие новости:
06.01.2020, 22:45

Форум:
12.02.2020, 12:22

Последний вопрос:
19.02.2020, 23:23
Всего: 151644

Последний ответ:
20.02.2020, 01:22
Всего: 259793

Последняя рассылка:
20.02.2020, 04:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
26.04.2012, 15:53 »
John_the_Revelator
Спасибо большое за понятный, развернутый ответ + хорошее оформление! [вопрос № 185904, ответ № 270643]
02.03.2010, 12:47 »
vera-nika
большое спасибо, вы мне очень помогли, сама я в этом не сильно разбираюсь [вопрос № 176985, ответ № 259824]
03.05.2011, 22:15 »
Лобанова Наиля Валентиновна
Спасибо [вопрос № 183022, ответ № 266931]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 617
solowey
Статус: Специалист
Рейтинг: 260
Gluck
Статус: Студент
Рейтинг: 248

Перейти к консультации №:
 

Консультация онлайн # 143293
Раздел: • С / С++
Автор вопроса: Cimus
Отправлена: 07.09.2008, 19:28
Поступило ответов: 1

Здравствуйте!
Столкнулся с такой задачей, что нужно переложить скрипт с PHP на C++. Установил Microsoft Visual Studio v6.0, начал изучать документацию по C++ и столкнулся с тем, что в этом языке нет поддержки регулярных выражений. Запрос к Гуглу или Яндексу показал, что можно использовать сторонние библиотеки, такие как PCRE (www.pcre.org).

В силу того, что с C++ я не знаком, у меня появился вопрос, как включить поддержку регулярных выражений в программу?
Да, на сайте www.pcre.org есть описание установки этой библиотеки, но Английский язык для меня трудноват, да и с C++ я знаком буквально неделю.
Хотелось бы узнать от вас, как можно правильно подключить эту библиотеку в свою программу и заставить работать простой пример с http://www.webcode.ru/re/pcre/.

Последнее редактирование 07.09.2008, 19:29 [неизвестный]

Состояние: Консультация закрыта

Здравствуйте, Cimus!

да, действительно, Си не поддерживают регулярные выражения, но похоже лишь потому, что он обладает другой техноглогией ввода-вывода: scanf-printf, эта пара функций в общем случае предоставляет более широкий механизм форматирования и поиска (есть разве что один недостаток по отношению к регулярным выражениям: повторный ввод шаблона невозможен)

документация на русском языке сейчас уже не проблема, любой поисковик может предоставить вам множество русскоязычных сайтов-прототипов SDK с полным или частичным описанием функций, достаточно просто ввести название функции в форму поиска (но ориентироваться по структуре смежных API лучше всетаки с оригинала: http://msdn.microsoft.com/)

вот, к примеру, что выдал google:
для scanf: http://www.codenet.ru/progr/cpp/spru/scanf.php
для printf: http://www.codenet.ru/progr/cpp/spru/printf.php

эти функции форматируют ввод-вывод в файлы,
аналогично существует набор функций для ввода-вывода в/из памяти: sscanf-sprintf, но их формат практически не отличается от scanf-printf,
поэтому достаточно изучить только эту пару функций

соответствие шаблону в этом случае можно определять несколькими способами:

1. анализировать результат scanf-sscanf (он равен числу считанных выражений, заданных шаблоном), к примеру: на шаблон "мама мыла %*d рам" результат будет 1, если строка соответствует шаблону, а вот шаблон еще и с ожиданием строки: "мама %*s мыла %*d рам" или "мама %*[^0x20] мыла %*d рам" (соответствие: "мама Зина мыла 5 рам", "мама Наташа мыла 9 рам" и т.п.) здесь уже 2 выражения, следовательно scanf-sscanf вернет 2 в случае успеха.

2. анализировать результат контрольного выражения, например sscanf(src,"мама мыла %*d рам%n",&n) выставит в переменную n номер символа, на котором анализ строки был завершен, так, при этом инициализируя n = -1 можно убедиться в соответствии строки шаблону: если n не изменился, значит строка не подходит, иначе - подходит вплоть до выражения "%n"

3. существует еще один неявный способ: анализ считывающего маркера _ptr в структуре FILE, который после вызова sscanf-sprintf указывает на конец строки, либо на первый символ, не соответствующий шаблону.

PS: выражение "%n" не учитается на возврате из scanf-sscanf, поэтому во втором случае успешный результат будет так же 1, все остальные выражения обязательно учитаются
PS: как мы видим, формат scanf немного похож на регулярные выражения, но на самом деле все с точностью до наоборот: регулярные выражения - урезанный аналог scanf.


Консультировал: mega
Дата отправки: 08.09.2008, 15:24

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13280 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.81 от 18.02.2020
Версия JS: 1.35 | Версия CSS: 3.37