如何在字符串中查找格式化的数字?

时间:2010-02-26 09:38:33

标签: c++ string

如果我有一个字符串,并且我想查找它是否包含XXX-XX-XXX形式的数字,并返回其在字符串中的位置,是否有一种简单的方法可以做到这一点?

XXX-XX-XXX可以是任何数字,例如259-40-092。

3 个答案:

答案 0 :(得分:4)

这通常是正则表达式的工作。例如,查看Boost.Regex库。

答案 1 :(得分:0)

我之前做过......

正则表达是你的超级英雄,成为他的朋友......

//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

答案 2 :(得分:0)

如果你不想要正则表达式,这是一个算法:

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--”中你知道第二个 - 也不可能是第一个 - 也就是数字。