프로그래밍 언어/C++

대소 문자를 구분하지 않는 'Contains (string)'

Rateye 2021. 10. 25. 11:15
728x90
반응형
질문 : 대소 문자를 구분하지 않는 'Contains (string)'

다음 반환을 사실로 만드는 방법이 있습니까?

string title = "ASTRINGTOTEST";
title.Contains("string");

대 / 소문자 구분을 설정할 수있는 과부하가없는 것 같습니다. 현재는 둘 다 대문자로 표시하지만 어리석은 일입니다 (상하 케이스와 함께 제공 되는 i18n 문제를 언급하고 있습니다).

최신 정보
이 질문은 오래된 질문이며 그 이후로 완전히 조사하고 싶다면 정말 방대하고 어려운 주제에 대한 간단한 답변을 요청했습니다.
대부분의 경우 단일 언어, 영어 코드 기반 에서이 답변으로 충분합니다. 이곳에 오는 대부분의 사람들이이 범주에 속하기 때문에 이것이 가장 인기있는 대답입니다.
대답은하지만 우리는 모두 텍스트가 같은 문화를 알고 때까지 우리는 텍스트의 경우를 구분 비교 할 수없는 고유의 문제를 제공하고 우리는 문화가 무엇인지 알고있다. 이것은 덜 인기있는 답변 일 수 있지만 더 정확하다고 생각하므로 그렇게 표시했습니다.

답변

paragraph word 가 포함되어 있는지 테스트하려면 (@QuarterMeister에게 감사드립니다)

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

여기서 culture 는 텍스트가 작성되는 언어를 설명하는 CultureInfo 의 인스턴스입니다.

이 솔루션은 언어에 따라 달라지는 대소 문자 구분없는 정의에 대해 투명합니다. 예를 들어, 영어는 9 번째 문자의 대문자 및 소문자 버전에 Ii 문자를 사용하는 반면 터키어는 29 자 길이 알파벳 의 11 번째 및 12 번째 문자에 이러한 문자를 사용합니다. 'i'의 터키어 대문자 버전은 생소한 문자 'İ'입니다.

따라서 문자열 tinTIN 은 영어 에서는 동일한 단어 이지만 터키어 에서는 다른 단어입니다. 내가 이해했듯이 하나는 '정신'을 의미하고 다른 하나는 의성어 단어입니다. (Turks, 내가 틀렸다면 나를 수정하거나 더 나은 예를 제안하십시오)

요약하자면, 텍스트가 어떤 언어로되어 있는지 아는 경우 '이 두 문자열은 동일하지만 다른 경우'라는 질문에만 답할 수 있습니다. 모르는 경우 펀트를해야합니다. 소프트웨어에서 영어의 헤게모니를 감안할 때 익숙한 방식으로 잘못 될 것이기 때문에 CultureInfo.InvariantCulture

출처 : https://stackoverflow.com/questions/444798/case-insensitive-containsstring
728x90
반응형