Функция поиска кодового слова c ++ - PullRequest
0 голосов
/ 09 июня 2018

Ниже приведен простой код для поиска 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 голосов
/ 09 июня 2018

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