3

textfieldというUITextFieldがあります。そして、テキストフィールドのテキストが「exampletext」と等しいかどうかを確認するためのこのコードがあります

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

ただし、テキストが「exampletext」とほぼ同じである場合、テキストフィールドのテキストが「exampletext」とほぼ等しいかどうかも確認したいと思います。テキストが「eampletex」の場合のように、NSLog(@ "Close")を実行します

テキストフィールドのテキストが「exampletext」と50%等しいかどうかを確認する方法はありますか?または、テキストフィールドのテキストに「exampletext」と50%同じ文字が含まれているかどうかを確認する方法はありますか?またはそのような何か他のもの?

4

4 に答える 4

3

あなたが探しているのは、レーベンシュタイン距離、levenshtein("hello", "hallo") => 1、levenshtein("hello", "ellos") => 2の実装です。このライブラリを確認できます。

2 つの文字列間の距離を取得したら、パーセンテージの計算として取得できます: パーセンテージ = 100 * レーベンシュタイン (オリジナル、その他) / 長さ (オリジナル)

于 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...");
    }

これがあなたが探しているものであるかどうかはわかりませんが、とにかく役立つかもしれません...

于 2013-01-30T18:58:38.900 に答える
0

これを解決する簡単な方法 (数行のコード) はないと思います。いくつかのアルゴリズムを検討して、ニーズに最も適したものを選択してください。

この質問を見る必要があります。別の言語用に設計および回答されていますが、方法または方法を求めたので、そこに解決策があります。

于 2013-01-30T18:38:08.657 に答える
0

私はあなたのためにこれを行うオープンソースがどこかにあると確信しています..しかし、私が考えることができる1つのアプローチはあなたに少しのリードを与えるでしょう...

両方の文字列の文字を配列に並べ替えます。マスター ストリングにするストリングを決定し、そのストリングの長さを取得します。

それでは各キャラを比較してみましょう。例: 単語 1: こんにちは、単語 2: こんにちは。

文字が見つかるたびに、カウントに 1 を追加します。ループの終わりまでに、カウントがマスター文字列から取得した元の長さの 80% 以上である場合は、部分一致である可能性が高くなります。

この例では、Word 1 がマスター文字列で、長さは 5 です。「ello」には 4/5 文字が含まれているため、元の文字列の 80% に一致します。

于 2013-01-30T18:29:32.067 に答える