C语言,有哪个兄弟可以帮我看一下,就是b数组在进入最后一个循环以后死循环了,刚学习C语言,不胜感激
贴源码
仅供参考!满意请采纳,谢谢!
防止连续数字太长,整型溢出!所以我用了字符数组接收截取的各个连续数字串。具体可自行更改。
#include <stdio.h>
#include <string.h>
//找到第一个数字串 没有返回-1
//并且把发现的数字串复制到dst数组中
//返回截已经截取过的字串的下一个位置索引
int getsFirstDigis(char *res, char *dst)
{
const char s0[] = "0123456789";
int len = strlen(res);
int n1 = strcspn(res, s0);
int n2 = strspn(res, s0);
//第一个不是数字 n1>0 n2=0
int index1 = 0;
int index2 = 0;
char *p1 = res;
char *p2 = NULL;
if (n1 == len)
return -1;
else if (n1 > 0)
{
index1 = n1;
p1 = res + n1;
p2 = p1;
while (*p2 >= '0' && *p2 <= '9')
{
p2++;
}
int tmp = p2 - p1;
strncpy(dst, p1, tmp);
return p2 - res;
}
//第一个是数字
else
{
index1 = 0;
index2 = n2;
strncpy(dst, res, n2);
return index2;
}
return -1;
}
int main(int argc, char *argv[])
{
char s[2048];
char a[2048][2048];
int k = 0;
int index = -2;
int slen;
char *p = s;
scanf("%[^\n]s", s);
slen = strlen(s);
while (index != -1 && p - s < slen)
{
index = getsFirstDigis(p, a[k]);
if (index >= 0)
{
p += index;
k++;
}
}
for (int i = 0; i < k; i++)
{
puts(a[i]);
}
printf("\n一共有%d个\n", k);
return 0;
}