2013-10-24 73 views
-1

我正在嘗試爲我輸入的值搜索結構。但是,即使我只輸入了單詞的一部分,我也希望搜索能夠正常工作。我該怎麼做呢?正在搜索一個值

這裏是我的代碼:

for (int i = 0; i < size; i++) 
{ 
    if (searchName == ptrCandy[i].name) 
    { 
     cout << "Name: " << ptrCandy[i].name << "\n" << "Quantity: " << ptrCandy[i].quantity; 
     cout << "\n" << fixed << setprecision(2) << "Cost: $" << ptrCandy[i].cost << "\n" << endl; 
    } 
} 
+0

我覺得你的問題是完全不清楚。你能解釋得更好嗎? –

+0

如果不知道'searchName'和'ptrCandy [i] .name'是什麼類型,就很難回答這個問題。 – Steve

回答

0

首先,你需要爲比賽如何接近必須是一個門檻。是1個字母好嗎?

秒,決定它是否必須匹配從一開始,或開始一個單詞,例如確實對「氣味」起作用?

然後,如果你不想通過每一個字符用另一個庫,循環和繼續下去,直到達到閾值或字符串

換句話說結束,如果名稱是「龍花花公子一個」搜索字符串是「dude」,然後從名稱[0]開始,並執行一個4迭代循環(四個字母在花花公子),並檢查每個與名稱相應的一個。如果有任何字母不匹配,請退出該循環。然後從名字[1]到名字[4],然後從名字[2]到名字[5]等一路做同樣的事情,直到您檢查搜索字符串「one」的最後4個字母。然而,你不會那麼遠,因爲在第6次嘗試時,例如循環通過名稱[5]到名稱[8],所有4個字母都會匹配,因此您將設置match = true並退出。

把它放在一個函數中,併爲每個名稱調用它。

1

我假設如果你輸入n個字符,你只想匹配以這n個字符開頭的糖果元素,而不是試圖做任何自動更正或拼寫檢查等。如果這些都是正確的假設,然後讓STL做的工作適合你:

int searchLength = searchName.length(); 
for(int i=0; i<size; i++) { 
    if (ptrCandy[i].name.length() >= searchLength && 
     searchName == ptrCandy[i].name.substr(0, searchLength)) { 
    // Found it! 
    } 
} 

舉例來說,如果你有一個糖果命名的「士力架」和「小吃混合物」,那麼,如果你輸入「SN」,它將返回這兩個,但如果你輸入「sni」,你只會得到「竊笑」。

0

假設這些類型的std::string

for (int i = 0; i < size; i++) 
{ 
    size_t pos = ptrCandy[i].name.find(searchName); 
    if (pos != string::npos) 
    { 
     cout << "Name: " << ptrCandy[i].name << "\n" << "Quantity: " << ptrCandy[i].quantity; 
     cout << "\n" << fixed << setprecision(2) << "Cost: $" << ptrCandy[i].cost << "\n" << endl; 
    } 
} 

如果你想做到這一點不區分大小寫的,只是轉換兩個字符串要麼全部大寫或小寫,然後做修改字符串搜索。

0

你可以使用成員函數比較下面的方式

for (int i = 0; i < size; i++) 
{ 
    if (ptrCandy[i].name.compare(0, searchName.size(), searchName) == 0) 
    { 
     cout << "Name: " << ptrCandy[i].name << "\n" << "Quantity: " << ptrCandy[i].quantity; 
     cout << "\n" << fixed << setprecision(2) << "Cost: $" << ptrCandy[i].cost << "\n" << endl; 
    } 
}