代码字搜索功能c ++

时间:2018-06-09 15:09:36

标签: c++ string search editing

下面是一个在字符串中查找2401的简单代码。我不知道这个数字是2401,它可以是0-9之间的任何数字。要找到我要使用的4位数字" DDDD"。字母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";
 }

1 个答案:

答案 0 :(得分:0)

尝试使用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 >> pattern;