2012-03-17 63 views
0

我已經從一個句子中獲取了一組單詞(句子中的每個單詞放在一個數組中)。正在搜索一個短語

用戶可以搜索一個短語,以查看它是否在此句子中找到。這是通過字符的偏移值確定的。這意味着每個單詞都被檢查以查看它是否存在於短語中,然後進行檢查以查看這些單詞是否相繼出現(由句子中的空格分隔)。

單詞存儲在一棵樹中,因此偏移值(字符位置)是決定哪個單詞在哪個單詞之後(並且用空格分隔)唯一的東西。

我的問題是,相同(並且已存儲在樹中)的單詞具有相同的偏移值,因此每個單詞都存儲所有偏移值的數據結構,並與特定單詞一起提供。這是迄今爲止的代碼,除了在以下情況下失敗之外,它完美的工作:

例如,我有這句話:this is a test to see if this is working

如果我搜索'這是',那麼將返回第一個this is以及this is a

下面的代碼:

for (int i = 0; i < offsets.Count - 1; i++) 
{ 
    LinkedList<int> current = allOffsets[i]; 
    LinkedList<int> next = allOffsets[i + 1]; 

    for (int j = 0; j < current.Count; j++) 
    { 
     for (int k = 0; k < next.Count; k++) 
     { 
      if (current.ElementAt(j) + words[i].Length - 1 + 2 == next.ElementAt(k)) 
      { 
       if (!finalResult.Contains(current.ElementAt(j))) 
       { 
        finalResult.Add(current.ElementAt(j)); 
       } 

       if (!finalResult.Contains(next.ElementAt(k))) 
       { 
        finalResult.Add(next.ElementAt(k)); 
       } 
      } 
     } 
    } 
} 

return finalResult; 

請注意:finalResult是存儲所有的「有效」偏移和offsets存儲在樹中的所有偏移量的列表。 words是一個數組,其中包含從句子中分離出的所有單詞。

編輯:另請注意,我正在檢查是否通過將單詞的第一個字母的偏移量加上2(考慮到空間)來查看單詞是否相互跟隨,並且這將等於下一個單詞的第一個字母的偏移量(如果有)。

+0

是所需的輸出只是一個字符串短語?或者你是否需要在數組中使用這些偏移來獲得其他內容? – 2012-03-17 17:16:26

回答

0
 var source = new List<string>() { "this", "is", "a", "test", "to", "see", "if", "this", "is", "working" }; 
     var userInput = "this is a"; 
     var inputList = userInput.Split(' '); 
     var inputListCount = inputList.Count(); 
     var exists = false; 
     for (int i = 0; i < source.Count; i++) 
     { 
      if (inputList[0] == source[i]) 
      { 
       var found = true; 
       for (int j = 1; j < inputListCount; j++) 
       { 
        if (inputList[j] != source[j]) 
        { 
         found = false; 
         break; 
        } 
       } 

       if (found) 
       { 
        exists = true; 
        break; 
       } 
      } 
     } 

     Console.WriteLine(exists); 
+0

不知道你想要什麼,但如果你只想檢查它是否存在,我認爲我的程序可以工作。 – 2012-03-17 15:28:56

+0

雖然這看起來不錯,但不幸的是我的問題不好。不管怎麼說,還是要謝謝你。 – Palindrome 2012-03-17 15:38:29