Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сравнить две строки

22K
22 августа 2007 года
YanMin
20 / / 22.08.2007
Народ подскажите как сравнить строки, основываясь на логике работы Винды.

Например: ~exe --- ~* верно
Nb?? --- Nber верно
Nb?? --- Nberyt неверно
16K
22 августа 2007 года
Zbyszek
118 / / 08.08.2007
Посмотри вот это:
Код:
int wildcmp(const char *wild, const char *string) {
  // Written by Jack Handy - jakkhandy@hotmail.com
  const char *cp = NULL, *mp = NULL;

  while ((*string) && (*wild != '*')) {
    if ((*wild != *string) && (*wild != '?')) {
      return 0;
    }
    wild++;
    string++;
  }

  while (*string) {
    if (*wild == '*') {
      if (!*++wild) {
        return 1;
      }
      mp = wild;
      cp = string+1;
    } else if ((*wild == *string) || (*wild == '?')) {
      wild++;
      string++;
    } else {
      wild = mp;
      string = cp++;
    }
  }

  while (*wild == '*') {
    wild++;
  }
  return !*wild;
}
240
22 августа 2007 года
aks
2.5K / / 14.07.2006
Про регулярные выражения ченибудь слышал? )
22K
22 августа 2007 года
Pastor
43 / / 16.05.2007
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
PCRE (Perl-compatible regular expression library)

И велосипед изобретать не надо... :)
92
23 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
BOOST рулит :)) там и регэкспы.. и вообще, много всего, что жизнь упрощает ;)
240
23 августа 2007 года
aks
2.5K / / 14.07.2006
б/п ))
22K
15 сентября 2007 года
YanMin
20 / / 22.08.2007
Кто шарит в регулярных выражениях, подскажите как составить запрос. Мне надо по маске находить файлы на диске.

Например krot.h~j = k???.?~? или *.txt = mmm.txt=vbfg.txt или 1*.txt = 1234.txt = 1.txt = 12.txt

Код:
#include <pcre.h>

   char pattern[] = "krot.h~j";
   char str[] = "k???.?~?";


   pcre *re;
   int options = 0;
   const char *error;
   int erroq;
   re = pcre_compile ((char *) pattern, options, &error, &erroq, NULL);

   if (!re){
     MessageBox(Form1->Handle,"Ошибка","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);

   }
   else{
      int count = 0;
      int ovector[30];

      count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, ovector, 30);
      if (!count){
         MessageBox(Form1->Handle,"Нет совпадений","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
      }
      else{
         for (int c = 0; c < 2 * count; c += 2){
            if (ovector[c] < 0){
               MessageBox(Form1->Handle,"Нет совпадений1111","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
            }
            else{
             MessageBox(Form1->Handle,("Совпадение"+IntToStr(ovector[c])+"   "+ IntToStr(ovector[c + 1])).c_str(),"Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
            }
         }
      }
   }
92
15 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
k[\w\d]{1,4}\.[\w\d].*{1}[\w\d] - если не перепутал ничего... кто увидит ошибку, я думаю поправит.

[^\.]\.txt

1[^\.]\.txt
22K
18 сентября 2007 года
YanMin
20 / / 22.08.2007
Тень Пса
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
12
18 сентября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: YanMin
Тень Пса
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.


В мане по PHP :D . Ищущий да обрящет ;)

240
19 сентября 2007 года
aks
2.5K / / 14.07.2006
Да причем тут ман по ПХП. Что челоеку чтобы почитать теорию по регэкспам впринципе никак не зависящим от языков программирования нада PHP ставить?

YanMin
Можешь скачать - собственно классика по построению и синтаксису регулярных выражений:
http://www.softtime.ru/info/fridl.php?down=fridl.djvu
Как конккретно заюзать регулярные выражения в C++ зависит от либы которая предоставляет эту функциональность. В boost есть хорошая поддержка регэкспов, если пишешь под винду исспользуюя ATL можно восспользоваться ATL-ной библиотекой регэкспов, ну и собственно полно еще реализаций.
92
19 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: YanMin
Тень Пса
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.


BOOST.REGEX, поддерживает регулярные выражения like: Perl, POSIX extended и POSIX basic.

можешь почитать у них на сайте. http://www.boost.org/libs/regex/doc/syntax.html

12
19 сентября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: aks
Да причем тут ман по ПХП. Что челоеку чтобы почитать теорию по регэкспам впринципе никак не зависящим от языков программирования нада PHP ставить?


Нет. Просто, имхо, это там изложено на русском языке и вполне человеческим языком.

386
23 сентября 2007 года
newcss
297 / / 05.04.2005
что бы не мучать свой и ваш моск как что составить юзайте FLEX. специальная библиотека позволяющая забацать на основе конечных афтоматов ваши рег выражения. Язык очень прост [0-9],[A-Z]..... похожа на кастрированный RegExp. Если запросы не такие уж и сложные написать свой конечный афтомат позволяющий эти фишки.
----
1. Разработать свой язык (ну расписать что к чему ~,?,+,! и т.д.)
2. Разработать модель конечного афтомата позволяющего решать подобную задачу.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог