我希望从输入文件中找到一组单词与其他单词共享公共子串。
因此输入文件中的一个可能的单词是:" area" 它将被比较的字符串是" -are - d"
有没有一种比较和验证两个字符串都包含"是"的好方法。子?
答案 0 :(得分:0)
您可以使用正则表达式。
这是您需要的代码:
#include <iostream>
#include <iterator>
#include <string>
#include <regex>
int main()
{
std::string txt="-are--d";
std::tr1::regex rx("are");
bool matchFound = regex_search(txt.begin(), txt.end(), rx);
if(matchFound)
{
std::cout << "match found!";
}
}
答案 1 :(得分:0)
如果要匹配整个字符串,请使用regex_match
。如果要匹配子字符串,请使用regex_search
。在g ++ 4.8.1中,您需要使用boost库,因为未实现regex c ++ 11。在g ++ 4.8.1中,您可以使用以下代码编译代码:g++ regex_boost.cpp -o regex_boost -lboost_regex
#include <iostream>
#include <string>
#include <boost/regex.hpp>
//#include <regex> // it is not implemented in g++ 4.8.1
using boost::regex;
using boost::regex_match;
using boost::regex_search;
using namespace std;
int main() {
string fnames[] = {"fileone.txt", "data.txt", "pp.txt", "foo.out"};
regex txt_regex("[a-z]+\\.txt");
for (int i=0; i<4; ++i)
cout << fnames[i] << ":" << regex_match(fnames[i],txt_regex) << '\n';
string txt="-are-arde-dsarefdd";
regex rx("are");
// not matching because it should match the whole string
cout << txt << ":" << regex_match(txt, rx) << endl;
// matching substrings ("are" is matched)
cout << txt << ":" << regex_search(txt, rx) << endl;
return 0;
}
该程序给出了结果:
$ ./regex_boost
fileone.txt:1
data.txt:1
pp.txt:1
foo.out:0
-are-arde-dsarefdd:0
-are-arde-dsarefdd:1