C++ C++;如何扫描用户';特定单词的字符串输入? #包括 #包括 #包括 int main() { 使用名称空间std; 串句; cin>>句子; 字符串word=“香蕉”; 正则表达式r(“\\b”+word+”\\b”); smatch s; if(正则搜索(句子,s,r)){ 库特

C++ C++;如何扫描用户';特定单词的字符串输入? #包括 #包括 #包括 int main() { 使用名称空间std; 串句; cin>>句子; 字符串word=“香蕉”; 正则表达式r(“\\b”+word+”\\b”); smatch s; if(正则搜索(句子,s,r)){ 库特,c++,C++,“我输入了一个包含香蕉一词的句子,问题来了。如果我在句子中键入香蕉作为第一个单词,它将检测到它(例如:香蕉等),但如果它不是第一个单词(例如:香蕉等),它将检测不到它。” 按您所拥有的代码 #include <regex> #include <string> #include <iostream> int main() { using namespace std; string sentence; cin >> senten

“我输入了一个包含香蕉一词的句子,问题来了。如果我在句子中键入香蕉作为第一个单词,它将检测到它(例如:香蕉等),但如果它不是第一个单词(例如:香蕉等),它将检测不到它。”

按您所拥有的代码

#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;
    }
}
仅从输入中读取一个单词(直到下一个空格分隔符)

“有解决办法吗?”

当然:如果你想从输入中得到一个完整的句子,你宁愿使用

std::cin >> sentence;

还要注意的是,在这样一个简单的情况下使用
std::regex()
太麻烦了。如果您真的只想查找像
“banana”
这样的简单序列,而不想查找模式,这将很好地为您服务(成本要低得多)


“是的,我使用名称空间是因为它使我的生活更轻松。”


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

你确定你的reggae是正确的吗?你知道像这样简单的搜索,
std:string::find
就足够了吗?顺便说一句,
使用名称空间
通常只在头文件的全局范围内被接受是不好的做法。@ForceBru这是一个可爱的打字错误。@ForceBru我很确定他们的可怕锁的形状是正确的;-)…非常感谢!我忘了cin只需要一个词。如果从长远来看它不能很好地为我服务,那么我将放弃这个习惯。我正在尝试制作一个简单的AI来响应某些输入,如果正则表达式“太重”是std::string::找到最好的替代方案?
std::getline(std::cin,sentence);