有没有一种很好的方法来检查C ++中的常见子串?

时间:2014-04-30 01:58:31

标签: c++ string function comparison substring

我希望从输入文件中找到一组单词与其他单词共享公共子串。

因此输入文件中的一个可能的单词是:" area" 它将被比较的字符串是" -are - d"

有没有一种比较和验证两个字符串都包含"是"的好方法。子?

2 个答案:

答案 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