如何查找字符串是否与数组中找到的字符串匹配
How to find if a string match one found in an array?
查看给定的字符串是否与数组中的任何字符串匹配,将已知字符串与字符串数组进行比较的最有效方法是什么?
例如:你有
string String1 = "ID5";
string String2 = "ID7";
您想查看它们中的任何一个是否包含在以下
string List[5] = {"ID1", "ID7", "ID10", "ID34", "ID62"}
这样你就可以做到这一点
if(#STRINGMATCHES) {
// Do one thing
}
else {
// Do another
}
通过使用 std::find
std::find(List, List+5, String1)
如果您需要多次执行此搜索操作,这就是我的建议 - 使用一些哈希函数对所有字符串进行哈希处理,然后创建一个包含排序哈希的新数组。然后,当您需要检查数组中是否包含字符串时,请在排序数组中binary_search其哈希值。这将比按照als的建议只做std::find更有效,但取决于你需要执行足够多的搜索操作,以便速度增益弥补排序开销。
如果数组是排序的,您可以使用std::binary_search()
:
std::string List[] = { "ID1", "ID10", "ID7", "ID34", "ID62" };
if (std::binary_search(std::begin(List), std::end(List), "ID7"))
{
std::cout << "found stringn";
}
如果没有,则使用std::find()
(如Als所述)。
最简单的解决方案是放置您正在寻找的字符串到数组中并使用std::find_first_of
:
std::string targetList[] = { "ID5", "ID7" };
std::string searchList[] = { "ID1", "ID2", "ID3", "ID4", "ID5" };
if ( std::find_first_of( begin( searchList ), end( searchList ),
begin( targetList ), end( targetList ) )
!= end( targetList ) ) {
// found...
} else {
// not found...
}
这不一定是最有效的解决方案,因为 find_first_of
对数据不作任何假设。 如果搜索列表非常大,不会更改,例如,目标列表只包含几个元素,对搜索列表,然后对目标列表中的每个元素进行二分搜索。
我有一个想法。
首先,我们应该使列表排序,就像hmjd描述的那样。
在比较两个字符串时,我们可以记录一些信息。
例如
表二 Dimension 数组 DIF 记录两个字符串不同的索引。
string[2] = {"abc","abd"}
list[5] = {"aab","abb","abc","bcd","ef"}
dif[0][0] = 1 ("abc" and "aab" differ at index 1)
dif[0][1] = 2 ("abc" and "abb" differ at index 2)
dif[0][2] = -1 ("abc" and "abc" are same, so we use -1 to represent two strings are same)
dif[0][3] = 0 ("abc" and "bcd" differ at index 0)
dif[0][4] = 0 ("abc" and "eg" differ at index 0)
当我们需要将新字符串与列表中的字符串进行比较时。我们首先在已比较的字符串中找到最相似的字符串。例如,"abd"是判断所需的字符串。我们找到"abc"。"abd"和"abc"在索引2上有所不同。因此,当我们比较"adb"和列表中的字符串时,我们不需要比较索引中与"abc"不同的字符串,而不是2。例如,我们不需要比较"abd"和"ef",因为"abd"在索引2处与"abc"不同,而"abc"在索引0处与"ef"不同。
我的想法非常粗略,有很多细节需要考虑。我认为它很有用,尤其是在大规模问题中。
- 找到具有最多子串栅栏的字符串排列
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 我的求解(字符串 a、字符串 b)的输出与随机哈希中的预期输出不匹配
- 没有使用两种类型的字符串进行匹配的函数调用
- 如何修复"找不到系统(字符串)的匹配项
- 错误:调用"std::basic_ifstream<char>::basic_ifstream(std::__cxx11::字符串&)"没有匹配函数
- 错误:调用"人脸检测器::人脸检测器(std::__cxx11::字符串)"没有匹配函数
- 正在检查字符串以匹配Char变量
- Q_DECLARE_INTERFACE()和Q_PLUGIN_METADATA(),接口id字符串需要匹配
- C++11 正则表达式与字符串不匹配
- 返回的字符串和提取的字符串不匹配
- 使用后缀数组和 LCP(-LR) 实现字符串模式匹配
- 生成与集合中的字符串不匹配的字符串
- _stricmp返回错误的值,而字符串确实匹配.该怎么办
- C++中两个字符串之间匹配的字符数
- 如何使用标准库(包括boost)实现简单的字符串模式匹配
- 定位字符串中匹配的单词
- C++ regex_match match_continuous标志与开始子字符串不匹配
- 字符串模式匹配和插入
- 字符串文字匹配bool重载,而不是std::String