Ниже приведен простой код для поиска 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";
}
попробуйте использовать регулярные выражения. Они могут быть своего рода болью в заднице, но довольно сильные когда-то справились. В вашем случае я бы рекомендовал использовать 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;
Других решений пока нет …