首页 > 解决方案 > 码字搜索功能c++

问题描述

下面是在字符串中查找 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++stringsearchediting

解决方案


尝试使用正则表达式。它们可能有点让人头疼,但一旦掌握,它们就会非常强大。在您的情况下,我建议使用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 次”。在这里查看更多信息
  • 在您提到的问题中,您希望编译器进行匹配。编译器不匹配正则表达式,而是在运行时匹配。在这种情况下,您还可以更改输入字符串和正则表达式。
  • using namespace std;使std::这些变量声明不需要前缀
  • std::getline(std::cin, pattern);可以替换为cin >> pattern;

推荐阅读