19.07.2019, 05:50 [+3 UTC]
в нашей команде: 3 748 чел. | участники онлайн: 1 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
19.07.2019, 04:09
Всего: 149940

Последний ответ:
18.07.2019, 12:04
Всего: 258705

Последняя рассылка:
17.07.2019, 22:15

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

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

Наша кнопка:

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

Отзывы о нас:
08.07.2010, 04:54 »
Kalina777
Спасибо за оперативный ответ! [вопрос № 179436, ответ № 262458]
17.11.2010, 21:22 »
Dimon4ik
Спасибо. Ознакомлюсь. [вопрос № 180816, ответ № 264128]
26.11.2011, 01:56 »
Tigresska
Сделали все просто отлично))) спасибки)) [вопрос № 184483, ответ № 268909]

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

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

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

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

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 198
solowey
Статус: Практикант
Рейтинг: 186
Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 143

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

Консультация онлайн # 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.16646 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35