开发者

How to find a formatted number in a string?

开发者 https://www.devze.com 2022-12-21 03:26 出处:网络
If I have a string, and I want to find if it contains a number of the form XXX-XX-XXX, and return its position in the string, is there an easy way to do that?

If I have a string, and I want to find if it contains a number of the form XXX-XX-XXX, and return its position in the string, is there an easy way to do that?

开发者_Go百科XXX-XX-XXX can be any number, such as 259-40-092.


This is usually a job for a regular expression. Have a look at the Boost.Regex library for example.


I did this before....

Regular Expression is your superhero, become his friend....

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

To give you a position in the string, that will be your homework. :-) The regular expression in C++ will be...

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

Use Boost.Regex for this instance.


If you don't want regexes, here's an algorithm:

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.
}

Not optimal but but the scan speed will already be dominated by the cache/memory speed. It can be optimized by considering on what part the match failed, and how. For instance, if you've got "123-4X-X............", when you find the X you know that you can skip ahead quickly. The second - preceding the X cannot be the first - of a proper number. Similarly, in "123--" you know that the second - can't be the first - of a number either.

0

精彩评论

暂无评论...
验证码 换一张
取 消