Searching for a value
Searching for a value
我正在尝试在结构中搜索我输入的值。 但是,即使我只输入单词的一部分,我也希望搜索有效。我该怎么做?
这是我的代码:
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;
}
}
我假设如果您输入 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",你只会得到"士力架"。
首先,您需要一个阈值来指示匹配的接近程度。 1个字母可以吗?
其次,决定它是否必须从开头匹配,或者一个单词的开头,例如对"气味"确实有效?
然后,如果您不想使用其他库,请遍历每个字符并继续,直到达到阈值或字符串末尾
换句话说,如果名称是"Long dude one",搜索字符串是"dude",那么从name[0]开始,做一个4迭代循环(dude中的四个字母),并检查每个字母与名称中的对应字母。 如果任何字母不匹配,请退出该循环。 然后从 name[1] 到 name[4],然后从 name[2] 到 name[5] 等一直做同样的事情,直到你检查搜索字符串"one"的最后 4 个字母来对抗 dude。 但是,您不会走那么远,因为在第 6 次尝试时,例如循环通过 name[5] 到 name[8],所有 4 个字母都将匹配,因此您将设置 match=true 并退出。
将其放在一个函数中,并为每个名称调用它。
假设这些类型是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;
}
}
如果要不区分大小写,只需将两个字符串转换为全部大写或全部小写,然后对修改后的字符串进行搜索。
可以使用成员函数比较如下方式
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;
}
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- ASCII Value for c++
- Use case for std::promise::set_{value|exception}_at_thread_e
- 为什么我会得到"You must feed a value for placeholder tensor 'output' with dtype int64"?
- Searching for a value
- 澄清使用for(auto iter: value)遍历映射