Сравнение NSString

Я ищу алгоритм, в котором я могу сравнить две строки и прочитать ошибки.

Я знаю обычный код для сравнения двух строк, но этого недостаточно.

Пример:

NSString *userinput = @"xaplseiPhonr";// (Input from the user)
NSString *correct =@"apple iphone";

На следующем шаге я проверю эти строки и выложу ошибки для этого примера: x,l,s, ,r = 5 неудачников.

Я многое тестировал, сохранял две строки в массив с двумя циклами for и сравнивал, но что-то не так, самое сложное, если в слове есть 2 одинаковые буквы. Или, если у вас нет динамического поиска по индексу, то целые буквы после «l» или отсутствующего пробела в пользовательском вводе ложны и так далее.

Итак, было бы неплохо, если бы у кого-нибудь был хороший код для меня.


редактировать: код для сравнения, но это не работает, если вы пропустили букву или пробел.

for (int i = 0; i < [originalWordLetters count]; i++) 
{
    NSString *originalLetter = [originalWordLetters objectAtIndex:i];

    //NSLog(@"%i: %@", d, originalLetter);
    BOOL letterFound = FALSE;

    while (letterFound == FALSE && d < [userWordLetters count]) 
    {
        if ([originalLetter caseInsensitiveCompare:[userWordLetters objectAtIndex:d]] == NSOrderedSame) 
        {
            //NSLog(@"letter %i correct", d+1);
            letterFound = TRUE;
        }
        else
        {
            //NSLog(@"letter %i false", d+1);
            failedLetters++;
        }
        d++;
    }
}

У меня есть рабочий алгоритм, в котором вы можете сравнить две строки. И потушить ошибки

Я загрузил пример проекта на GitHub: NSString compareTwoStrings: алгоритм выводит ошибки


person SomethingIsCrazy    schedule 12.07.2012    source источник
comment
Можете ли вы быть немного более ясным/опубликовать код, который вы пробовали?   -  person Imirak    schedule 13.07.2012
comment
если отредактировал мой пост с кодом. Я также написал код, который работает, если пользователь пропустил букву/пробел, но если в слове две одинаковые буквы, он также не работает.   -  person SomethingIsCrazy    schedule 13.07.2012


Ответы (2)


Вам нужно вычислить расстояние Damerau-Levenshtein между двумя строками. Вот реализация с открытым исходным кодом для NSString: GitHub JanX2/NSString-DamerauLevenshtein

person Nicolas Bachschmidt    schedule 12.07.2012
comment
Нет, я не использовал этот проект. Однажды я написал свою собственную реализацию алгоритма, но больше не могу найти код. - person Nicolas Bachschmidt; 13.07.2012
comment
Круто, я сделал это, я загружаю свой NSString compair SampleProject - person SomethingIsCrazy; 14.07.2012
comment
Если ответ был полезен, не забудьте принять его. Спасибо. ;-) - person Nicolas Bachschmidt; 17.01.2013

Вы можете использовать NSScanner для этого.

person samir    schedule 12.07.2012
comment
Спасибо за быстрый ответ, проверю. - person SomethingIsCrazy; 13.07.2012
comment
вы уверены, что я могу решить проблемы с NSScanner, я не тестировал код, но я прочитал документацию Apple, и я думаю, что это не работает для меня. - person SomethingIsCrazy; 13.07.2012