如果我有一个列表,其中包含4个节点(“this”;“测试示例”;“是某些东西”;“小”),我想找到每个字符串都有“是”(只有1个)积极的这个清单)。这个主题已被发布了很多次,我已经用它来帮助我这么做了。但是,我无法在任何地方看到我如何从积极的结果中省略“这个”。我可以使用string :: c_str,然后在我减少了更大的列表之后自己找到它。或者有没有办法可以使用string :: find_first_of?看起来似乎有更好的方法。谢谢。
编辑:我知道我可以省略一个特定的字符串,但我正在寻找更大的图片b / c我的列表相当大(例如:诗)。
for(it = phrases.begin(); it != phrases.end(); ++it)
{
found = it->find(look);
if(found != string::npos)
cout << i++ << ". " << *it << endl;
else
{
i++;
insert++;
}
}
答案 0 :(得分:1)
只是为了澄清:你在为什么苦苦挣扎?
你想要做的是检查你发现的是一个单词(或短语)的开头,也是单词(或短语)的结尾
即。检查是否:
found
等于phrases.begin
或found
之前的元素是空格found
之后的两个元素是空格OR phrases.end
编辑:您可以使用found
访问找到的字符(将X替换为您找到的字符串的长度(look.length)
found = it->find(look);
if(found!=string::npos)
{
if((found==0 || it->at(found-1)==' ')
&& (found==it->length-X || it->at(found+X)==' '))
{
// Actually found it
}
} else {
// Do whatever
}
答案 1 :(得分:0)
我没有意识到你只想匹配“是”。您可以使用std :: istringstream为您标记它:
std::string term("is");
for(std::list<std::string>::const_iterator it = phrases.begin();
it != phrases.end(); ++it)
{
std::istringstream ss(*it);
std::string token;
while(ss >> token)
{
if(token == term)
std::cout << "Found " << token << "\n";
}
}
答案 2 :(得分:0)
我们可以使用boost regex来搜索正则表达式。下面是一个示例代码。使用正则表达式可以创建复杂的seacrh模式。
#include <boost/regex.hpp>
#include <string>
#include <iostream>
#include <boost/tokenizer.hpp>
using namespace boost;
using namespace std;
int main()
{
std::string list[4] = {"this","hi how r u ","is this fun is","no"};
regex ex("^is");
for(int x =0;x<4;++x)
{
string::const_iterator start, end;
boost::char_separator<char> sep(" ");
boost::tokenizer<boost::char_separator<char> > token(list[x],sep);
cout << "Search string: " << list[x] <<"\n"<< endl;
int x = 0;
for(boost::tokenizer<boost::char_separator<char> >::iterator itr = token.begin();
itr!=token.end();++itr)
{
start = (*itr).begin();
end = (*itr).end();
boost::match_results<std::string::const_iterator> what;
boost::match_flag_type flags = boost::match_default;
if(boost::regex_search(start, end, what, ex, flags))
{
++x;
cout << "Found--> " << what.str() << endl;
}
}
cout<<"found pattern "<<x <<" times."<<endl<<endl;
}
return 0;
}
输出:
搜索字符串:此
发现模式0次。
搜索字符串:嗨如何
发现模式0次。
搜索字符串:这很有趣
找到 - &GT;找到了 - &gt;发现模式2次。
搜索字符串:否
发现模式0次。