示例#1
0
char* UriGetScheme( char* str, unsigned int strLen, char** next )
{
	/*
	http://[email protected]:port/path?query=true#fragment
	'--'
	  '- Retrives this part
	*/
	char* ptrEnd = str;
	char c;
	for( unsigned int i = 0; i < strLen; i++ )
	{
		c = str[i];
		// The scheme is terminated with :
		if( c == ':' )
		{
			break;
		}
		// Check for disallowed characters in the scheme
		else if( !( CharIsAlpha( c ) || CharIsDigit( c ) || c == '+' || c == '-' || c == '.' ) )
		{
			// We found a disallowed character, this is not a scheme.
			return 0;
		}
		else
		{
			ptrEnd++;
		}
	}
	unsigned int len = ptrEnd - str;
	char* out = calloc( len + 1,sizeof(char) );
	if( out != NULL )
	{
		memcpy( out, str, len );
		out[len] = 0;
		StringToLowercase( out );
	}
	else
	{
		ERROR("Cannot alloc memory for URI\n");
	}
	*next = ptrEnd + 1;

	return out;
}
示例#2
0
//ищет подряд идущие 16 цифр, причем между цифрами могут быть любые символы, также перед первой
//цифрой (предыдущая позиция) не должно быть цифры и после последней цифры не должно быть сразу цифры
//Если найдено 16 цифр, то возвращает начальную их позицию, если нет, возвращает szSrc или больше,
//в posEnd будет позиция последней цифры
int FindCard16Digit(char* pSrc, int szSrc, int pos, char* pDst, int& posEnd )
{
    for(;;)
    {
        //ищем начало номера карточки
        while( pos < szSrc )
        {
            if( pSrc[pos] == '4' || pSrc[pos] == '5' || pSrc[pos] == '6' ) //номер карточки всегда начинается с 4 или 5
                break;
            pos++;
        }
        //ищем дальше цифры
        if( pos < szSrc )
        {
            if( (pos > 0 && !CharIsDigit(pSrc[pos - 1])) || pos == 0 ) //если в предыдущей позиции не цифра
            {
                int i = 0;
                pDst[i++] = pSrc[pos]; //сохранили 1-ю цифру
                int pos1 = pos + 1;
                //ищем таким образом чтобы если между цифрами есть разрывы, то чтобы подряд было обязательно 4 цифры
                int together = 1; //количество подряд идущих цифр
                while( pos1 < szSrc && i < 16 ) //ищем следующие цифры
                {
                    if( CharIsDigit( pSrc[pos1] ) )
                    {
                        pDst[i++] = pSrc[pos1]; //сохранили очередную цифру
                        posEnd = pos1; //позиция последней цифры
                        together++;
                    }
                    else
                    {
                        if( together > 0 && together != 4 )  //если подряд не 4 цифры, то
                        {
                            if( together < 4 ) //если их меньше 4-х, то игнорим найденные цифры, т. е. делам возрат назад
                            {
                                i -= together;
                                if( i == 0 ) //если это были начальные цифры, то прекращаем поиск
                                    break;
                            }
                            else
                            {
                                break; //если больше, то прекращаем поиск
                            }
                        }
                        together = 0;
                    }
                    pos1++;
                }
                if( i == 16 ) //нашли 16 цифр, если не нашли, то в pos будет = szSrc, что означает - последовательности из 16 цифр нет
                {
                    if( pos1 >= szSrc || !CharIsDigit(pSrc[pos1]) ) //если дошли до конца или следующий символ не цифра
                    {
                        pDst[i] = 0; //нашли нужное, завершающий нуль
                        break;
                    }
                }
                else
                {
                    if( pos1 >= szSrc )//дошли до конца строки значит заканчиваем поиск, все равно ничего уже не найдем
                    {
                        pos = szSrc;
                        break;
                    }
                }
            }
            pos++; //переходим на следующую позицию в строке
        }
        else
            break;
    }
    return pos;
}
示例#3
0
FBOOL CharIsAlphanumeric( char c )
{
	return CharIsAlpha( c ) || CharIsDigit( c );	
}