2013-03-06 1 views
1

두 문자열의 비슷한 문자 수를 확인하려면 내장 메서드가 있습니까 (설명서를 검색하여 찾을 수 없음)? 문자의 순서는 관련이 없으므로 "abc"와 "cad"를 비교하면 문자 'c'와 'd'가 66 % 일치합니다. 발생 건수도 관련이 있습니다. 'a'는 두 문자열 사이에 하나의 공통 'a'가 있기 때문에 처음에는 일치하지만 두 번째에는 일치하지 않아야합니다. 현재 비트 연산을 사용하여이 작업을 수행하는 방법이 내장되어 있습니까? 아니면 루프를 실행하고 수동으로 비교해야합니까?비슷한 문자 수를 비교하는 메서드가 내장 된 NSString

+0

발생 횟수는 중요합니까? 예를 들어, "abc"와 "abac"는 모두 'a', 'b'및 'c'문자를 포함하므로 100 % 일치합니까? – Chuck

+0

'NSString'의'commonPrefixWithString' 메소드가 도움이 될 수 있습니다. – nsgulliver

+0

발생 횟수는 분명 적절합니다. 나는 그것을 반영하기 위해 나의 질문을 업데이트 할 것이다. – randombits

답변

3

직접 제작해야하지만 여기에 바로 가기가 있습니다. NSCountedSet이라는 내장 클래스가 있습니다. 이 개체는 각 고유 개체와 추가 된 개체 수를 유지합니다.

두 개의 문자열을 가져 와서 해당 문자를 서로 다른 두 개의 NSCountedSet 컬렉션으로로드 할 수 있습니다. 그런 다음 결과 컬렉션의 항목을 확인하십시오. 예를 들어, 먼저 NSCountedSet에서 개체를 가져옵니다. 두 번째 NSCountedSet에 있는지 확인하십시오. 그 특정 문자에 대한 2 카운트 중 작은 숫자는 2 개의 문자열이 공통으로 가지고있는 문자의 수입니다. 반복 횟수를 줄이려면 적은 수의 개체로 시작한 다음 해당 개체를 통해 열거하십시오.

여기 애플의 설명서는 NSCountedSet입니다. https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html

1

저는 주저 합니다만, 아마도 여러분의 요구 사항을 채우는 방법은 없을 것입니다. 나는 이것을 할 것이다 :

NSString에 카테고리를 만든다.

  1. self의 사본은 고유의 문자를 포함하는 selfCopy and trim selfCopy`라고 확인 :

    -(float)percentageOfSimilarCharactersForString:(NSString*)targetString 여기이 범주에 들어가는 거친 의사의 호출 할 수 있습니다.

  2. 비슷하게 트림 targetString을 고유 한 문자로 트림합니다. 고유 한 문자로 트리밍하려면 NSSet 또는 그 하위 클래스를 사용할 수 있습니다. 각 캐릭터를 반복하고 세트에 추가하면 도움이됩니다.
  3. 이제 두 세트를 모두 ASCII 값으로 정렬하십시오.
  4. 관련 NSSet의 각 문자를 반복하고 selfCopy 관련 NSSet에 있는지 확인하십시오. 이를 위해 containsString이라는 또 다른 카테고리를 사용할 수 있습니다. You can find that here. containsString은 true를 반환 할 때마다 미리 정의 된 카운터를 증가시킵니다.
  5. 반환 값은 (counter_value/length_of_selfCopy)*100입니다.
관련 문제