Как найти отформатированный номер в строке? - PullRequest
1 голос
/ 26 февраля 2010

Если у меня есть строка, и я хочу найти, содержит ли она число вида XXX-XX-XXX, и вернуть ее позицию в строке, есть ли простой способ сделать это?

XXX-XX-XXX может быть любым числом, например 259-40-092.

Ответы [ 3 ]

4 голосов
/ 26 февраля 2010

Обычно это работа для регулярного выражения. Взгляните на библиотеку Boost.Regex , например.

0 голосов
/ 26 февраля 2010

Если вы не хотите регулярных выражений, вот алгоритм:

Find the first -
LOOP {
  Find the next -
  If not found, break.
  Check if the distance is 2
  Check if the 8 characters surrounding the two minuses are digits
  If so, found the number.
}

Не оптимально, но скорость сканирования уже будет зависеть от скорости кеша / памяти. Его можно оптимизировать, учитывая, в какой части матч провалился и как. Например, если у вас есть «123-4X-X ............», когда вы найдете X, вы знаете, что можете быстро пропустить. Второе - предшествующее X не может быть первым - правильного числа. Точно так же в «123--» вы знаете, что второе - не может быть первым - числа тоже.

0 голосов
/ 26 февраля 2010

Я делал это раньше ....

Регулярное выражение - ваш супергерой, станьте его другом ....

//Javascript
var numRegExp = /^[+]?([0-9- ]+){10,}$/;
if (numRegExp.test("259-40-092")) {
  alert("True - Number found....");
else 
  alert("False - Not a Number");
}

Чтобы дать вам позицию в строке, это будет ваша домашняя работа. :-) Регулярное выражение в C ++ будет ...

char* regExp = "[+]?([0-9- ]+){10,}";

Используйте Boost.Regex для этого экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...