mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-18 04:53:06 +01:00
Added stristr().
This commit is contained in:
@@ -73,6 +73,87 @@ namespace bx
|
||||
return --_str;
|
||||
}
|
||||
|
||||
/// Find substring in string. Case insensitive.
|
||||
inline const char* stristr(const char* _str, const char* _find)
|
||||
{
|
||||
const char* ptr = _str;
|
||||
|
||||
for (size_t len = strlen(_str), searchLen = strlen(_find)
|
||||
; len >= searchLen
|
||||
; ++ptr, --len)
|
||||
{
|
||||
// Find start of the string.
|
||||
while (tolower(*ptr) != tolower(*_find) )
|
||||
{
|
||||
++ptr;
|
||||
--len;
|
||||
|
||||
// Search pattern lenght can't be longer than the string.
|
||||
if (searchLen > len)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Set pointers.
|
||||
const char* string = ptr;
|
||||
const char* search = _find;
|
||||
|
||||
// Start comparing.
|
||||
while (tolower(*string++) == tolower(*search++))
|
||||
{
|
||||
// If end of the 'search' string is reached, all characters match.
|
||||
if ('\0' == *search)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/// Find substring in string. Case insensitive. Limit search to _size.
|
||||
inline const char* stristr(const char* _str, const char* _find, size_t _max)
|
||||
{
|
||||
const char* ptr = _str;
|
||||
|
||||
const size_t total = strlen(_str);
|
||||
size_t len = _max < total ? _max : total;
|
||||
|
||||
for (const size_t searchLen = strlen(_find); len >= searchLen; ++ptr, --len)
|
||||
{
|
||||
// Find start of the string.
|
||||
while (tolower(*ptr) != tolower(*_find) )
|
||||
{
|
||||
++ptr;
|
||||
--len;
|
||||
|
||||
// Search pattern lenght can't be longer than the string.
|
||||
if (searchLen > len)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Set pointers.
|
||||
const char* string = ptr;
|
||||
const char* search = _find;
|
||||
|
||||
// Start comparing.
|
||||
while (tolower(*string++) == tolower(*search++))
|
||||
{
|
||||
// If end of the 'search' string is reached, all characters match.
|
||||
if ('\0' == *search)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/// Find new line. Returns pointer after new line terminator.
|
||||
inline const char* strnl(const char* _str)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user