C++分离整数 新手遇到有关问题 请求大家的帮助

C++分离整数 新手遇到问题 请求大家的帮助
Description
给定一个字符串,其中含有数字字符和非数字字符,将其中的连续数字字符作为整数。输出字符串中整数的个数。
Input
输入数据有若干行,每行上有一个字符串对应一种情形。字符串中的整数个数不超过10000个,字符串的长度不超过65536字符。
Output
对于每一种情形,先输出“Case #:”(#为序号,从1起),空1格,然后输出其中整数的个数。
Sample Input
a123x456U17960?302t ab5876
202.120.127.211
1st8.35t3
abc defg
Sample Output
Case 1: 5
Case 2: 4
Case 3: 4
Case 4: 0


我的代码:
#include<iostream>
#include <fstream>
#include<string>
using namespace std;
int main()
{
long int  j, k, q, p, n = 0, word;
string a;
while (getline(cin, a))
{

word = 0;
n += 1;
k = a.size();
p = 0;
for (q = 0; q < k; q++)
{
if (!(a[q] >= '0'&&a[q] <= '9'))
p++;
else
break;
}
for (j = p; j < k; j++)
{
while (a[j]>='0'&&a[j]<='9')
{
if (j == k - 1)
break;
j++;
}
word++;
while (!(a[j] >= '0'&&a[j] <= '9'))
{
if (j == k - 1)
break;
j++;
}
if (j == k - 1)
break;
else
j -= 1;
}
if (!(a[k - 2] >= '0'&&a[k - 2] <= '9') && (a[k-1] >= '0'&&a[k-1] <= '9'))
word++;
cout << "Case " << n << ": " << word << endl;
}
return 0;
}

测试用例都是对的,提交上去之后,显示错误:
=================/test.out
Right:
1

-----------------
Your:
2

=================

求救!!!
------解决思路----------------------
这个提示很清楚了, 有一个测试数据, 答案应该是1,你输出了2, 所以找个测试用例试一下, 把下面的试一下看是那一组有问题
0ab
ab0
a0b
000
------解决思路----------------------
前面大部分算法还算清晰,问题出在
if (!(a[k - 2] >= '0'&&a[k - 2] <= '9') && (a[k-1] >= '0'&&a[k-1] <= '9'))
word++;

上。
为什么要对末尾单独的数字做出判断?为什么要对最后一个字符特殊对待,使得你做出了“字符串长度一定大于1”的错误假设?
一个字符是否在字符串结尾,和算法应该没有关系,但你的代码没写好
while (...)
{
    if (j == k - 1)
        break;

应该写成
while (j != k && ...)
{

因为&&的短路运算性质,既不会产生非法访问,也能够正确处理处于末尾的字符

另外,既然用了stl,应该活用内置的算法,比如:
#include <iostream>
#include <iterator>
#include <regex>
#include <string>
#include <utility>

using namespace std;

int main()
{
    string line;
    int casecount = 0;
    regex num_regex("\\d+");
    while (getline(cin, line))
    {
        cout << "Case " << ++casecount << ": " <<
            distance(sregex_iterator(line.begin(), line.end(), num_regex), sregex_iterator()) << endl;
    }
    return 0;
}