2013-03-18 4 views
1

주어진 문자열을 미리 정의 된 문자열과 비교하고 삽입 오류, 삭제 오류, 변환 또는 대체 오류가 발생했는지 확인해야하는 프로그램이 있습니다. 단어 가 사용자에게 표시하고 사용자가 또는 도제 제출되었는지C에서 두 문자열 비교 #

는 예를 들어,이 삽입 에러가 이루어진 것으로, 유저에게 통지한다.

어떻게해야합니까?

+0

삽입보다 큰 있는지 확인할 수 있습니다 확인 어디 - 데이터베이스에? –

+0

감사합니다. 하지만 데이터베이스를 사용하지 않습니다. –

+0

그리고 사전 정의 된 문자열은 계속 변경됩니까? 아니면 일정합니까? –

답변

-1

function을 작성 하시려면 parameterinput sting으로 표시됩니다. function은 다소 비슷하게 보입니다. 언제 어디서나 function을 사용하십시오.

private void CheckString(string userString) 
{ 
    string predefinedString = "dog"; 
    if (userString == predefinedString) 
    { 
     // write your logic here 
    } 
    else 
    { 
     MessageBox.Show("Incorrect word"); // notify the users about incorrect word over here 
    } 
} 
+0

문자열이 동일한 지 여부 만 알려줍니다. OP는 "doge"와 같은 삽입 오류와 두 개의 연속 문자를 교체하는 "dgo"와 같은 다른 종류의 오류를 구별하려고합니다. 나는 OP가 이미 "=="연산자에 대해 알고 있다고 확신합니다. –

+1

사실 그것은 OP 질문에 대한 답변입니다. 문제는 OP 질문이 우리에게 충분한 정보를 제공하지 않는다는 것입니다. @KeithThompson 당신은 실제로 OP가 원하는 것을 가정합니다. –

+0

@AnthonyNichols - OP는 알고리즘이 전치, 치환, 삽입 또는 삭제를 탐지하기를 원합니다.나는 충분한 정보가 질문에 주어지지 않는다는 것에 동의하지만 OP는 두 문자열이 일치하는지 확인하는 것 이상을 원한다는 것에 동의한다. (삽입/삭제 등의 측면은 언급 할 필요가 없다.) – keyboardP

0

당신은 아마 같은 오류가 있는지 확인하기 위해 각 오류 유형의 각각의 방법을 쓸 필요가 :

bool IsInsertionError(string expected, string actual) { 
    // Maybe look at all of the chars in expected, to see if all of them 
    // are there in actual, in the correct order, but there's an additional one 
} 

bool IsDeletionError(string expected, string actual) { 
    // Do the reverse of IsInsertionError - see if all the letters 
    // of actual are in expected, in the correct order, 
    // but there's an additional one 
} 

bool IsTransposition(string expected, string actual) { 
    // This one might be a little tricker - maybe loop through all the chars, 
    // and if expected[i] != actual[i], check to see if 
    // expected[i+1] = actual[i] and actual[i-1]=expected[i] 
    // or something like that 
} 

모든 개별 규칙을 빌드하면, 당신 먼저 확인 보통 평등을 위해 한 번에 하나씩 꺼내십시오.

이러한 문제를 작은 구성 요소로 분해해야합니다. 그런 다음 쉽게 문제가 발생하면 한 번에 하나씩 해결하십시오.

내 머리 위로 떨어져
0

그러나 나는 이것이 당신이 시작하는해야한다고 생각 :

InsertionDeletion을 아주 간단해야한다; 그냥 문자열의 길이를 확인하십시오.

if(originalString.Length > newString.Length) 
{ 
    //deletion 
} 
else if(originalString.Length < newString.Length) 
{ 
    //insertion 
} 

것은, transposition을 감지 길이 일치 만약 그렇다면, 당신은 두 개의 문자열에서 두 List<char>를 만들 수 있는지 확인합니다. 그들이 substitution을 감지하기

bool isTransposed = originalList.OrderBy(x => x).SequenceEquals(newList.OrderBy(y => y)); 

아래의 표현식을 사용하여 일치하는 경우에 당신은 Hamming Distance를 사용하고 0