void ToLower( char* szStr) { assert(szStr); while( *szStr) { (*szStr) = LowerChar( *szStr); szStr++; } }
void ToLowerN( char* szStr, size_t iCount) { assert(szStr); if( iCount < strlen(szStr)) while( iCount) { szStr[iCount-1] = LowerChar( szStr[iCount-1]); iCount--; } else ToLower( szStr); }
bool StrSame(PCHAR Str, PCHAR ToSame, bool CaseSensetive, DWORD StrEndPosition) { // Функция сравнивает строку Str со строкой ToSame. // CaseSensetive определяет чувствительность к регистру // Если StrEndPosrition не равен нулю, то сравнение // ограничивается StrEndPosrition символами if (Str == NULL || ToSame == NULL) return false; DWORD Pos = 1; PCHAR S1 = Str; PCHAR S2 = ToSame; char C1; char C2; while (*S1 != 0 && S2 != 0) { C1 = *S1; C2 = *S2; if (!CaseSensetive) { LowerChar(C1); LowerChar(C2); } if (C1 != C2) return false; S1++; S2++; if (StrEndPosition != 0 && Pos >= StrEndPosition) return *S2 == 0; Pos++; } return *S1 == 0 && *S2 == 0; }
int STR::Pos(const char* Str, const char* SubStr, DWORD StrLen, bool CaseSensetive) { // Функция ищет подстроку _SubStr в строке _Str if( !Str || !SubStr ) return -1; DWORD s; DWORD j = 0; // DWORD slen = StrCalcLength(Str); DWORD sslen = StrCalcLength(SubStr); DWORD Pos = 0; DWORD Pos1 = 0; // Проходим циклом до конца строки char* p = (char*)Str; while (!IsStrEnd(p, StrLen, Pos)) { const char* k = SubStr; char PC = *p; char KC = *k; if (!CaseSensetive) { LowerChar(PC); LowerChar(KC); } // сравниваем первые символы if ( PC == KC ) { char* p1 = p; const char* k1 = k; Pos1 = Pos; s = 0; // Определяем количество совпадений while(!IsStrEnd(p1, StrLen, Pos1) && *k1 != 0) { char C1 = *p1; char C2 = *k1; if (!CaseSensetive) { LowerChar(C1); LowerChar(C2); } if (C1 == C2) s++; else break; if (s == (DWORD)sslen) return j; p1++; k1++; Pos1++; } } // смещаем указатели Pos++; p++; j++; } return -1; }