2015-02-01 6 views
1

나는 게임 내 프로그래밍을 추가 한 이래 서사시가되어 왔던 우주 기술자들을 연주 해왔다. 나는 GPS 자동 탐색 탐색 스크립트를 만들려고 노력 중이며, 블록 위치를 블록을 찾아서 찾아야한다. 더 큰 문자열 이름에서 더 작은 문자열을 찾는 이름입니다. 내가 또 다른 짧은 방법으로 일을해야한다,문자 배열 비교 방법

bool contains(string text, string wordInText) 
{ 
    char[] chText = text.ToCharArray(); 
    char[] chWord = wordInText.ToCharArray(); 

    int index = 0; 
    for(int i = 0 ; i < chText.Length - chWord.Length ; i++)  
     for(int j = 0; j < chWord.Length;j++,index++) 
      if (chWord[0] == chText[i]) 
       index = i; 
      else if (chWord[j] == chText[index]){}     
      else if (index == chWord.Length-1) 
       return true; 
      else break; 

    return false; 
} 

은 심지어 바로 그 일을 오전 : 나는 더 큰 문자열 (블록의 이름)을 작은 문자열 (단어)를 찾기 위해이 방법을 썼다?

+2

왜 String.Substring() methid https://msdn.microsoft.com/library/aka44szs(v=vs.110).aspx를 사용하지 않습니까? – demas

+1

문자열에 .Contains() 메서드가 이미 있습니다. –

+0

[문자열에 첫 번째 X 문자 내에 특정 부분 문자열이 포함되어 있는지 확인하는 방법] (http://stackoverflow.com/questions/501026/how-to-determine-if) -string-contains-specific-substring-within-the-first-x-charac) – Kiran

답변

1

bool을 반환하는 .Contains()를 사용하면 간단합니다.

text.Contains(wordInText); 
0

문자열에 다른 문자열이 들어 있는지 확인하려면 string.Contains을 사용할 수 있습니다. 문자열 클래스는 이미 문자열 연산을위한 메서드 모음을 제공합니다.

+0

문자열이 정확하고 찾은 문자열이 끝에 있으면 true를 반환한다고 생각합니다. –

+1

@mattstack 아니요, 두 번째 문자열이 첫 번째 문자열에 포함되어 있으면 true를 반환합니다. 당신이 질문에서 지정한 것입니다. 문자열이 무언가 (예 : Contains의 특정 경우)로 끝나는 지 테스트하려면 EndsWith를 사용하십시오. – Corey

+0

그래서 처음에는 내가 뭘 잘못했는지 확신 할 수 없습니다. 죄송합니다. –

0

이미 언급했듯이는 String 클래스는 이미 당신이 필요로하는 무엇을 제공해야 Contains 방법이있다.

즉, 귀하의 코드는 작동하지 않습니다. 나는 당신이 그걸로 어디로 가고 있는지를 볼 수 있지만 그것은 단지 일하지 않을 것입니다. 적절한 개발 환경에서이 스크립트를 실행하면 이유를 알 수 있지만, 스크립트의 방식이 더 이상 사용되지 않을 가능성이 높습니다.

그래서 기본 아이디어는 검색중인 문자열을 반복하여 검색 문자열과 일치하는 항목을 찾는 것입니다. 바깥 쪽 for 문장은 괜찮아 보이지만 내부 문장은 약간 엉망입니다.

첫 번째로, 첫 번째 문자 검사를 반복하고 있습니다. 그것은 낭비적이고 잘못 배치 된 것입니다. 외부 루프의 반복마다 한 번 수행하십시오.

둘째, wordInText의 첫 번째 문자가 wordInText.Length의 문자와 text의 문자가 일치 할 때 종료 조건이 실행됩니다. 이는 분명히 원하는 것이 아닙니다.

사실 모두 index 변수를 초과하여 작동합니다. 실제로는 유용하지 않으므로 완전히 삭제합니다.

다음은 비슷한 코드 조각입니다. 여전히 라이브러리 String.Compare 방법보다 훨씬 느리지 만, 동일한 결과를 얻을 수있는 방법을 보여주기를 바랍니다.

for (int i = 0; i <= chText.Length - chWord.Length; i++) 
{ 
    if (chText[i] == chWord[0]) 
    { 
     int j; 
     for (j = 0; j < chWord.Length; j++) 
     { 
      if (chText[i + j] != chWord[j]) 
       break; 
     } 
     if (j == chWord.Length) 
      return true; 
    } 
} 
return false;