#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作为第一个单词,它将检测到它(例如:香蕉等),但如果它不是第一个单词(例如:etc banana),它将不会检测到它。它有解决方法吗?是的,我正在使用命名空间,因为它让我的生活更轻松。
答案 0 :(得分:5)
“我输入一个包含单词banana的句子,问题就出现了。如果我在句子中输入香蕉作为第一个单词,它会检测到它(例如:香蕉等),但如果它不是第一个单词(例如:etc banana),它将不会检测到它。“
你拥有的代码
std::cin >> sentence;
只从输入中读取一个单词(直到下一个空格分隔符)。
“它有解决方法吗?”
当然:如果你想从输入中得到一个完整的句子,你宁愿使用
std::getline(std::cin,sentence);
另请注意,使用std::regex()
这样一个简单的案例太重了。如果您真的只想查找简单的序列,例如"banana"
而不是模式,std::string::find()
,则会很好地为您服务(成本更低)。
“是的,我正在使用命名空间,因为它让我的生活更轻松。”
最终它不会让你的生活更轻松,但恰恰相反。您只是容易与代码中的std
命名空间发生冲突(例如,考虑min()
,max()
,swap()
等的用户定义函数。)。 p>