1

私は自分自身にjavascriptを教えようとしています。シンプルだと思ったものを選びましたが、比較的早く問題にぶつかりました。

ユーザーが指定した別の文字列を検索しようとしています。

これまでの私のコードは次のとおりです。

var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = [];
var one = 0;
var two = 0;
var k = 0;

var sourceSearch = function(text) {
    for(i = 0; i < source.length; i++) { //for each character in the source
        if(source[i] === searchString[0]) {  //if a character in source matches the first element in the users input
            one  = source.indexOf(i); //confused from here on
            for(p = searchString.length; p > 0; p--) {

            }                    
        }
    }
};


sourceSearch(searchString);

私の考えは:

  • 最初のループがユーザー入力の最初の文字と一致する文字を見つけるかどうかを確認します
  • 一致する場合は、最初の次のX文字がソース文字列の次のX文字と一致するかどうかを確認します
  • それらがすべて一致する場合は、ヒット配列にプッシュします

私の問題:かなりの数のifステートメントをネストせずに配列に沿って反復する方法がわかりません。それでも、プログラムを任意の入力で動作させたいことを考えると、それだけでは不十分です。

どんなアイデアも役に立ちます。よろしくお願いします。

注:私がテストしていたアイデアからの未使用の変数がいくつかありますが、それらを機能させることができませんでした。

4

4 に答える 4

1

あなたが試すことができます:

if (source.indexOf(searchString) !== -1) {
// Match!
}
else
{
//No Match!
}
于 2013-03-21T03:54:55.557 に答える
0

これらの答えはすべてかなり良いですが、おそらく次のようなものを選ぶでしょう:

var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = source.split(searchString);
var hitsCount = hits.length - 1;

このようにして、各ヒットがソース内のどこで発生したかを把握するために必要なすべてのデータが得られます (それが重要な場合)。

于 2013-03-21T05:21:53.733 に答える
0

あなたのアプローチに従うには、2 つのインデックスで遊ぶことができます。

var sourceSearch = function(text) {
    j = 0;
    for(i = 0; i < source.length; i++) {
        if(source[i] === text[j]) {
            j++;                   
        } else {
            j = 0;
        }
        if (j == text.length) {
            console.log(i - j); //this prints the starting index of the matching substring
        }
    }
};
于 2013-03-21T04:03:04.677 に答える
0

これまでの他の回答が指摘しているように、JavaScript 文字列には、必要なindexOf機能があります。「手動」でどのように行われるかを確認したい場合は、次のように関数を変更できます。

var sourceSearch = function(text) {
    var i, j, ok; // always declare your local variables. globals are evil!
    // for each start position
    for(i = 0; i < source.length; i++) {
        ok = true;
        // check for a match
        for (j = searchString.length - 1; ok && j >= 0; --j) {
            ok = source[i + j] === searchString[j];
        }
        if (ok) {
            // searchString found starting at index i in source
        }
    }
};

この関数は、sourceatsearchStringが見つかったすべての位置を検索します。(もちろん、最初の成功でループから抜けることもできます。)ロジックは、外側のループを使用して各候補開始位置にsource進み、内側のループを使用してその位置が実際に一致する位置であるかどうかをテストすることです。にsearchString

これは、文字列の検索に最適なアルゴリズムではありません。組み込みアルゴリズムは、はるかに高速です (より優れたアルゴリズムであり、ネイティブ コードであるため)。

于 2013-03-21T04:03:21.463 に答える