2012-11-16 6 views
1

Xcode 및 iPhone 개발을 처음 사용합니다. 나는 문제에 갇혀있다.2 개의 다른 문자열에서 공통 문자 삭제하기

두 개의 textField가 있고이 문자열을 비교하고 싶습니다. 공통 문자가 있으면 생략하거나 삭제해야하며 새 문자열이 다른 텍스트 필드에 표시됩니다.

공통 문자는 문자열의 모든 위치에있을 수 있으며 한 번에 하나의 문자 만 생략됩니다 (for 루프에서).

+0

두 문자열의 순서를 유지해야합니까? – Fogmeister

+0

일반적인 캐릭터를 조금 더 잘 정의 해주세요. 예를 들어, 문자열에 있어야하거나 두 문자열에서 같은 위치에 있어야합니다. 'abcdefg'와'gfedcba'를 가져 가라. 같은 문자 만 있으면됩니다. 문자열은 비어 있습니다. 그러나 같은 위치에있을 필요가 있다면 문자열은 일반적인 문자를 제거한 후에'd'가됩니다. – Jeremy1026

+0

공통 문자는 문자열의 모든 위치에있을 수 있지만 한 번에 하나의 문자를 생략해야합니다 (for 루프에서) –

답변

1

방금이 편지를 작성했습니다. 나는 그것이 작동하지 않는 경우를 발견하지 못했습니다! 그것이 당신을 위해 작동하는지 말해주세요!

NSMutableString *shortString; //put your shortest string in here 
    NSMutableString *longString; //put your longest string in here 

    //index for characters to be removed in short string 
    int characterIndexesShort[shortString.length], characterIndexesLong[longString.length]; 
    int commonCharactersShort = 0, commonCharactersLong = 0; 
    int cut = 0; 

    for(int i = 0; i < shortString.length; i++) 
    { 
     int oldLongCharCount = commonCharactersLong; 
     char currentLetter = [shortString characterAtIndex:i]; 

     for(int j = 0; j < longString.length; j++) 
     { 
      if(currentLetter == [longString characterAtIndex:j]) 
       characterIndexesLong[commonCharactersLong++] = j; 
     } 

     if(commonCharactersLong != oldLongCharCount) 
      characterIndexesShort[commonCharactersShort++] = i; 
    } 
    //At this point you will have arrays containing the indexes of the common characters in both strings 


    for(int i = 0; i < commonCharactersLong; i++) 
    { 
     NSRange range; 
     range.location = characterIndexesLong[i]; 
     range.length = 1; 
     [longString replaceCharactersInRange:range withString:@""]; 
    } 

    for(int i = 0; i < commonCharactersShort; i++) 
    { 
     NSRange range; 
     range.location = characterIndexesShort[i] - cut; 
     range.length = 1; 
     [shortString replaceCharactersInRange:range withString:@""]; 
     cut++; 
    } 
+0

2 개의 문자열을 인수로 취하는 메서드를 만들 수 있습니다. 그런 다음 시작시 가장 길고 가장 짧은 것을 확인하고 해당 변경 가능 문자열에 저장하십시오. – Alex

+0

코드를 제공해 주셔서 감사합니다. 두 문자열이 동일하면? 왜이 코드는 짧고 긴 문자열을위한 것입니까? –

+0

긴 문자열이 shortString에 있으면 작동하지 않습니다. 하단의 for 루프가 약간 다릅니다. 그들이 동등하다면 어떤 방법 으로든 작동합니다. 당신이 내 대답을 좋아한다면 그것을 받아 들여라, 스택 오버 플로우에있는 사람들은 당신이 대답을 받아들이면 더 기꺼이 도와 줄 것이다. – Alex

관련 문제