在c ++中的向量中查找字符串

时间:2015-12-15 06:39:15

标签: c++

我有一个字符串向量,我想从vector返回一个类似于字符串的字符串。

例如,vector包含:" load"," fox"," google"," firefox"字符串是:" mozilla firefox"。此示例中的真实结果是" firefox"。

我使用下面的代码,但这是错误的并返回" fox"我的样本。

vector<string>::const_iterator it_found = find_if(MyVector.begin(), MyVector.end(), [&MyString](string s) -> bool 
{ return( MyString.find(s) != string::npos ); });

if(it_found != MyVector.end())
{
    //Do Somthing
}

我该怎么办?

2 个答案:

答案 0 :(得分:3)

您将返回第一个字符串,该字符串是您的搜索字词的子字符串。您似乎想要最佳匹配,因此需要更复杂的方法。您可以计算一些得分有多好,并找到给出最高得分的元素,例如:与std::max_element

如果您以后改进匹配算法,分数可能只是匹配子字符串的长度或更复杂的东西。

答案 1 :(得分:1)

您可以使用.factory('$localstorage', ['$window', function($window) { return { set: function(key, value) { $window.localStorage[key] = value; }, remove: function(key) { $window.localStorage.removeItem(key); }, get: function(key, defaultValue) { return $window.localStorage[key] || defaultValue; }, setObject: function(key, value) { $window.localStorage[key] = JSON.stringify(value); }, getObject: function(key) { return JSON.parse($window.localStorage[key] || '{}'); }, clearAll: function() { $window.localStorage.clear(); } } }]) 返回split的实现在空格上拆分输入字符串。

std::vector<std::string>

然后将std::vector<std::string> split(std::string const &input) { std::istringstream buffer(input); std::vector<std::string> ret((std::istream_iterator<std::string>(buffer)), std::istream_iterator<std::string>()); return ret; } 中的每个字符串与来自MyVector的返回向量中的候选字段进行比较。

split

输出:

std::string MyString = "mozzilla firefox";
std::vector<std::string> MyVector = {"fire", "fox", "firefox", "mozilla"};
auto candidates = split(MyString);
auto it_found = std::find_if(MyVector.begin(), MyVector.end(), [&candidates](std::string s) -> bool{  
  return (std::find(candidates.begin(), candidates.end(), s) != candidates.end()); 
}); 

if(it_found != MyVector.end()){
  std::cout<<"\nFound : "<<*it_found;
}

请注意,这只会找到Found : firefox 中字符串的第一个匹配项,并在MyVector中找到一个字符串。