【问题标题】:Code word search function c++码字搜索功能c++
【发布时间】:2018-06-09 15:09:36
【问题描述】:

下面是在字符串中查找 2401 的简单代码。我不知道那个数字是 2401,它可以是 0-9 之间的任何数字。要找到我想使用“DDDD”的 4 位数字。字母 D 将找到一个介于 0->9 之间的数字。我如何做到这一点,以便编译器意识到字母 D 是查找 1 位数字的代码。

#include <string>
#include <iostream>  
#include <vector>
using namespace std;

int main()
{

std::string pattern ; 
std::getline(std::cin, pattern);
std::string sentence = "where 2401 is";
//std::getline(std::cin, sentence);
int a = sentence.find(pattern,0);
int b = pattern.length();
cout << sentence.substr(a,b) << endl;
//std::cout << sentence << "\n";
 }

【问题讨论】:

  • 试用 c++ 正则表达式库 #include &lt;regex&gt; 并使用 std::regex 匹配模式 en.cppreference.com/w/cpp/regex
  • 您可以复制sentence,将数字替换为“D”,然后在副本中搜索“DDDD”,如果找到,则返回原始中的相应子字符串。
  • 我喜欢这个主意,会去看看!

标签: c++ string search editing


【解决方案1】:

尝试使用regular expressions。它们可能有点让人头疼,但一旦掌握,它们就会非常强大。在你的情况下,我建议使用regex_search(),就像这里:

#include <string>
#include <iostream>
#include <vector>
#include <regex>
using namespace std;

int main()
{
std::smatch m;
std::regex e ("[0-9]{4}");   // matches numbers
std::string sentence = "where 2401 is";

//int a = sentence.find(pattern,0);
//int b = pattern.length();
if (std::regex_search (sentence, m, e))
        cout << m.str() << endl;

//cout << sentence.substr(a,b) << endl;
//std::cout << sentence << "\n";
 }

如果您想精确匹配特定用户,您也可以只询问数字中的位数或完整的正则表达式等。

还注明:

  • [0-9]{4} 提供的简单正则表达式的意思是:“0 到 9 之间的任何字符,在一个序列中正好 4 次”。查看here了解更多信息
  • 在您提到的问题中,您希望编译器进行匹配。编译器不匹配正则表达式,而是在运行时匹配。在这种情况下,您还可以更改输入字符串和正则表达式。
  • using namespace std; 使得前缀 std:: 对于这些变量声明来说是不必要的
  • std::getline(std::cin, pattern); 可以替换为 cin &gt;&gt; pattern;

【讨论】:

  • 这没有回答 "要找到我想使用的 4 位数字 "DDDD""
  • 谢谢,有没有办法用 pattern.length() 替换 4 in ("[0-9]{4}")。
  • 是的,例如快速而肮脏的„[0-9]{„ + std::to_string(pattern.length()) + „}“。 (抱歉画质不好只好转电话评论)
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多