C ++如何扫描用户的特定单词/单词的字符串输入?

时间:2015-03-08 13:32:39

标签: c++

#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),它将不会检测到它。它有解决方法吗?是的,我正在使用命名空间,因为它让我的生活更轻松。

1 个答案:

答案 0 :(得分:5)

  

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

你拥有的代码

std::cin >> sentence;

只从输入中读取一个单词(直到下一个空格分隔符)。

  

“它有解决方法吗?”

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

std::getline(std::cin,sentence);

另请注意,使用std::regex()这样一个简单的案例太重了。如果您真的只想查找简单的序列,例如"banana"而不是模式,std::string::find(),则会很好地为您服务(成本更低)。


  

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

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