문제

두 개의 개별 문자를 비교하는 좋은 방법은 무엇입니까 (어느 쪽이든 char 또는 UTF-16 wchar_ts) 사건을 무시합니까?

사소한 구현은 둘 다 상위 또는 낮게 진행됩니다. 이들 중 하나가 더 나은 것으로 간주됩니까, 아니면 다른 방법이 있습니까?

나는 유니 코드의 모든 세부 사항에서 완전히 올바른 비교가 불가능하다는 것을 이해합니다. 비교는 주로 구성 파일과 마이크로 문법의 일부 기본 구문 분석을 의미하므로 완벽이 필요하지 않습니다. 나는 차당 별 비교의 제한에 따라 더 오래 지속되지 않는 구현을 찾고 있습니다.

편집하다
이 구성 파일에는 사용자에게 표시된 텍스트가 포함될 수 있습니다. 또한 사용자 입력을 분석 할 때 유니 코드 텍스트를 피할 수 없습니다.

도움이 되었습니까?

해결책

비교가 필요합니다. 넓은 숯이 필요하고 대소 문자를 사용하지 않는 깃발이 있습니다.

다른 팁

먼저 그것들을 문자열로 변환합니다. 예를 들어 두 개의 tchars 배열을 만들고 TCHAR을 첫 번째로 복사하고 두 번째를 _T ( ' 0')로 설정하십시오. 그런 다음 lstrcmpi 또는 비교를 호출하십시오. 이 두 가지 모두 필요에 따라 불충분 할 수 있지만 좋은 출발입니다. 예를 들어 ß를 상류시키고 싶거나 사용자가 터키어를 사용하고 있고 I를 상류하고 싶다면 직접하는 것이 생각보다 어렵습니다.

ASCII 기반 사례 비교 비교를 원하는 경우 구성 파일에 유니 코드를 사용하지 마십시오. 해당 파일에 ASCII를 사용하십시오. 그러면 로케일에 대해 걱정할 필요가 없습니다.

자신을 영어 (ASCII) 키워드로 제한하려는 경우 비교를 수행하는 사소한 방법이 있습니다. 키워드에서 AZ 이외의 문자를 사용하려는 경우 일반화되지 않지만 AZ에서 아름답게 작동합니다.

이 함수에 전달되는 값 중 하나가 ASCII 범위 32-127 (AZ, AZ, 0-9, 대부분의 기호)에 보이는 문자 만 포함 된 잘 알려진 좋은 키워드 문자열이 될 것이라고 간단한 비트 마스킹을 수행 할 수 있습니다. 하단을 대문자로 변환합니다.

bool IsKeywordMatch(LPCTSTR psz, LPCTSTR pszKey)
{
    while (pszKey[0])
    {
       if (psz[0] < 0x20)
          return false;

       if ((psz[0] & ~0x20) != (pszKey[0] & ~0x20))
         return false;

       ++psz;
       ++pszKey;
    }
    return true;
}

이 코드입니다 아니다 범용 문자열 비교, 알려진 좋은 키워드를 입력 문자열과 비교하는 것이 특화되어 있습니다. {}는 [],`의 대문자로``대문자 @, ~ ~ 대문자 ^로 취급하지만,이 함수의 입력 중 하나에 이러한 문자 중 하나가 포함되어 있지 않으면 중요하지 않습니다.

이렇게 사용해야합니다

if (IsKeywordMatch(pszInput, "value"))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top