By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,028 Members | 1,825 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,028 IT Pros & Developers. It's quick & easy.

Finding string with "wild" characters in another string

P: n/a
Hello!

I'm looking for efficient code or site where I can find code for finding one
string in another string. String which I search should have "wild"
characters like '?' for any one char and '*' for any string of characters.

I'm looking for way to effective getting string from text file and then
searching it like I write above.

Thanks in advance for any helps, notices or sites

--

Best regards
Paweł Chmielarz
----------------------------------
pa***@itproject.com.pl
Jul 22 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a

"Paweł" <pa***@itproject.com.pl> wrote in message
news:cc**********@sunflower.man.poznan.pl...
Hello!

I'm looking for efficient code or site where I can find code for finding one string in another string. String which I search should have "wild"
characters like '?' for any one char and '*' for any string of characters.

I'm looking for way to effective getting string from text file and then
searching it like I write above.

Thanks in advance for any helps, notices or sites

http://www.boost.org/libs/regex/doc/index.html

john
Jul 22 '05 #2

P: n/a
"Paweł" <pa***@itproject.com.pl> wrote in message
news:cc**********@sunflower.man.poznan.pl...
Hello!

I'm looking for efficient code or site where I can find code for finding one string in another string. String which I search should have "wild"
characters like '?' for any one char and '*' for any string of characters.

I'm looking for way to effective getting string from text file and then
searching it like I write above.

Thanks in advance for any helps, notices or sites


Hope this helps. I pulled it out of the project with some custom types
(e.g. char*) and changed them here to built-in types, but apologize if
it won't compile as is. The algorithm has been tested and is in production.
Unfortunately you will not get the found matched substrings as with
regular expressions, but is quite fast.

int wildMatch(char *wild, char *text)
{
enum { UNSYNC,SYNC,START };
char *lastwild, *lasttext; /* last synced position in CMP mode */
unsigned state, size; /* SEARCH mode(0), CMP mode otherwise */

for(state=START; ; )
{
if(*wild == 0) { /* is end of wildargs ? */
if(state!=UNSYNC && *text==0) /* is there text in synced mode?
*/
return 0;
if(state == START) /* there was no asterisk at all */
return -1;
/* compiler gives warning: possible use before definition */
size = wild-lastwild; /* size of the string */
return strcmp(lastwild, lasttext+strlen(lasttext)-size);
}

if(*text == 0) { /* is end of text ? */
while(*wild=='*') wild++; /* skip all asterisks */
return *wild==0 ? 0 : 1; /* wild is at the end - success */
}

if(state != UNSYNC)
{
/* sync is when texts are synchronized */
if(*wild == '*') {
while(*wild=='*') wild++;/* skip all consequent asterisks */
lastwild = wild; /* remember last positions */
lasttext = text;
state = UNSYNC; /* unsynchronize */
} else
if(*wild == *text || *wild == '?') {
wild++; /* they are same, move to nexts */
text++;
} else {
if(state == START) /* they don't match (no wildcard) */
return *wild-*text;
wild = lastwild; /* not equal chars in CMP mode */
text = ++lasttext; /* go back to last good */
state = UNSYNC; /* unsynchronize */
}
}
else
{
/* non-sync is looking first match */
if(*wild == *text) {
lasttext = text; /* remember last good position */
state = SYNC; /* synchronized again */
} else
text++;
}
}
}
Jul 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.