2013-10-24 69 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; 
    } 
}