3

我有一个名为 textfield 的 UITextField。我有这段代码来检查文本字段中的文本是否等于“exampletext”

if ([textfield.text isEqualToString:@"exampletext"]) {
    NSLog(@"Correct");
} else {
    NSLog(@"Wrong");
}

但我也想检查文本字段中的文本是否几乎等于“exampletext”,如果文本与“exampletext”几乎相同。就像文本是“eampletex”一样,我想 NSLog(@"Close")

有什么方法可以检查文本字段文本是否 50% 等于“exampletext”?或者有什么方法可以检查文本字段文本是否与“exampletext”有 50% 相同的字符?或者其他类似的东西?

4

4 回答 4

3

您正在寻找的是 levenshtein 距离的实现,levenshtein("hello", "hallo") => 1, levenshtein("hello", "ellos") => 2。您可以查看这个库

一旦你有两个字符串之间的距离,你可以得到一个百分比计算:百分比 = 100 * levenshtein(original,other) / length(original)

于 2013-01-30T18:36:58.213 回答
1

这是我的尝试。从要匹配的字符串创建自定义字符集。根据该字符集检查 texfield.text 中的每个字符,如果匹配数接近字符串中的字母数,请执行某些操作..

NSString *testString = @"wordToCompare";
NSString *textFromTextfield = textfield.text;

//create a custom character set from the word you want to compare to...
NSCharacterSet *characterSetForString = [NSCharacterSet characterSetWithCharactersInString:testString];

//keep track of how many matches...
int numberOfCharsThatMatchSet = 0;

    for (int x = 0; x < [textFromTextField length]; x++) {

        unichar charToCheck = [textFromTextField characterAtIndex:x];

        if ([characterSetForString characterIsMember:charToCheck] == YES) {
            numberOfCharsThatMatchSet++;
        }

        NSLog(@"%d", numberOfCharsThatMatchSet);
    }

         // if the number of matches is the same as the length of the word + or - 2...
    if ((numberOfCharsThatMatchSet > [testString length] - 2 ) && (numberOfCharsThatMatchSet < [testString length] + 2 )) {
        NSLog(@"close match...");
    }

不确定这是否是您正在寻找的 100%,但也许它会有所帮助......

于 2013-01-30T18:58:38.900 回答
0

我敢肯定,在某个地方可能会有一些开源代码可以为您做到这一点..但是,我能想到的一种方法会给您带来一些领先优势...

将两个字符串的字符排序为数组。确定您想成为主字符串的字符串并获取它的字符串长度。

现在比较每个字符。例如:单词 1:你好,单词 2:你好。

每次找到一个字母时,计数就加一。如果在循环结束时您的计数是您从主字符串中获取的原始长度的 80% 或更大,那么您很可能有部分匹配。

因此,对于我们的示例,Word 1 将是我们的主字符串,其长度为 5。“ello”包含 4/5 个字符,因此匹配原始字符串的 80%。

于 2013-01-30T18:29:32.067 回答
0

我认为没有一种简单的方法(用几行代码)来解决这个问题。您可以考虑几种算法并选择最适合您需求的一种。

你应该看看这个问题。尽管它是为另一种语言设计和回答的,但您要求一种方式或方法,以便在那里获得解决方案。

于 2013-01-30T18:38:08.657 回答