我有一个名为textfield的UITextField。我有这段代码来检查textfield中的文本是否等于“exampletext”
if ([textfield.text isEqualToString:@"exampletext"]) {
NSLog(@"Correct");
} else {
NSLog(@"Wrong");
}
但我还想检查文本字段中的文本是否几乎等于“exampletext”,如果文本与“exampletext”几乎相同。就像文本是“eampletex”一样,我想要NSLog(@“关闭”)
有没有办法检查文本字段文本是否像50%等于“exampletext”? 或者任何方法来检查文本字段文本是否与“exampletext”具有50%相同的字符? 或者其他类似的东西?
答案 0 :(得分:3)
你正在寻找的是levenshtein距离的实现,levenshtein(“你好”,“hallo”)=> 1,levenshtein(“你好”,“ellos”)=> 2.您可以查看this library。
一旦你有两个字符串之间的距离,你可以得到百分比计算:百分比= 100 * levenshtein(原始,其他)/长度(原始)
答案 1 :(得分: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%,但无论如何它可能会有所帮助......
答案 2 :(得分:0)
我确信在那里可能会有一些开源代码可以为你做到这一点......但是,我能想到的一种方法会给你带来一些好处......
将两个字符串的字符整理成数组。确定您想要成为主字符串的字符串并获取它的字符串长度。
现在比较每个角色。例如:Word 1:你好,Word 2:ello。
每次找到一封信,都会在计数中加一。如果在循环结束时,您的计数是您从主字符串中获取的原始长度的80%或更大,那么您很可能会有部分匹配。
因此,对于我们的示例,Word 1将是我们的主字符串,其长度为5.“ello”包含4/5个字符,因此匹配原始字符串的80%。
答案 3 :(得分:0)
我认为没有一种简单的方法(有几行代码)来解决这个问题。您可以考虑几种算法,并选择最适合您需求的算法。
您应该查看this问题。虽然它是针对另一种语言设计和解答的,但您要求提供一种方法或方法,以便在那里找到解决方案。