匹配一个单词的模式和提取整个单词

时间:2014-04-27 12:27:22

标签: c++ string pattern-matching

我正在尝试编写一个函数,该函数将单个单词的一部分与输入的文本匹配,如果该单词中存在该模式,则打印整个单词。我正在使用c ++。请帮助。 下面是我尝试使用字符串函数编写的函数,但是我只能找出句子中是否存在单词。但我需要提取其部分与输入文本匹配的单个单词。我希望我的问题很明确。

#include <cctype>
#include <iostream>
#include <string>

bool contains_word(const std::string& sentence, const std::string& word)
{
    size_t pos = 0;
    // Find the start of 'word' in 'sentence'.
    while ((pos = sentence.substr(pos).find(word)) != std::string::npos) {
            if (!(isalpha(sentence[pos - 1])) || !(isalpha(sentence[pos + word.size() +1])))
                    return true;
    }

    return false;
}

1 个答案:

答案 0 :(得分:0)

std::string get_word(const std::string& sentence, const std::string& substr)
{
  std::string::size_type it = sentence.find(substr);
  if(it == std::string::npos)
    return "";

  std::string::size_type it2 = it;
  for(; it >= 1 && !std::isspace(sentence[it - 1]); --it);
  for(; it2 <= sentence.size() - 1 && !std::isspace(sentence[it2 + 1]); ++it2);

  return sentence.substr(it, (it2 + 1) - it);
}

int main()
{
  std::string str("kchmviewer gnome-terminal");
  std::cout << get_word(str, "viewer") << std::endl;
  std::cout << get_word(str, "terminal") <<std::endl;
  return 0;
}

输出将是:

kchmviewer 
gnome-terminal