下面是一个在字符串中查找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";
}
答案 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;