#include <regex>
#include <string>
#include <iostream>
int main()
{
    using namespace std;
    string sentence;
    cin >> sentence;
    string word = "banana";
    regex r("\\b" + word + "\\b");
    smatch s;
    if (regex_search(sentence, s, r)) {
        cout << "success" << endl;
    }
}

我得到了部分工作。我输入一个包含香蕉一词的句子,这就是问题所在。如果我在句子中输入“banana”作为第一个单词,它将检测到它(例如:banana等),但如果不是第一个单词(例如:“banana”等),它将不会检测到它。有解决办法吗?是的,我使用 namespace 是因为它使我的生活更轻松。

最佳答案


拥有的代码

std::cin >> sentence;
仅从输入中读取单个单词(直到下一个空格分隔符)。

当然:如果您想从输入中获取整个句子,则可以使用
std::getline(std::cin,sentence);

还要注意,在这种简单情况下使用std::regex()太繁琐了。如果您真的只想查找"banana"这样的简单序列而不是模式,那么 std::string::find() 会很好地为您服务(成本要低得多)。


最后,它不会使您的生活更轻松,而相反。您很容易与代码中的std命名空间发生冲突(例如,考虑用户定义的min()max()swap()等函数)。

09-10 04:45
查看更多