程序填空题:提取字符串中的连续数字
程序的功能是从键盘读入一个不超过80个字符的字符串(包括数字、非数字字符、空格等,如:a123x456 17960? 302tab5876),将其中连续的数字作为一个整数,依次存放到一数组a中,例如针对刚才的例子,则123放在a[0]中,17960放在a[2]中……统计共有多少个整数,假定连续的数字值在int表示范围内。
```c++
#include
#include
int main(void)
{
char str[80], *pstr;
int i, j, k, m, e10, digit, ndigit, a[80], *pa;
gets(str);
pstr = str; /* 字符指针pstr置于数组str首地址 */
/* 指针pa置于a数组首地址 */
ndigit = 0; /* ndigit代表有多少个整数 */
i = 0; /* 代表字符串中第n个字符 */
j = 0; /* 代表连续数字的位数 */
while (1)
{
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
{
j++;
}
else
{
if (j > 0)
{
/* 将个位数赋予digit */
k = 1;
while (k < j)
{
e10=1;
for (m=1; m<=k; m++)
{
e10=e10*10; /* e10代表该位数所应乘的因子 */
}
digit = digit + (*(pstr + i - 1 - k) - '0') * e10;
k++;
}
/* 将数值赋予数组a */
ndigit++;
pa++;
j = 0;
}
}
if ('\0' == *(pstr + i))
{
break;
}
i++;
}
printf("There are %d numbers in this line.They are:\n", ndigit);
for(j=0; j {
printf("%d ", a[j]);
}
printf("\n");
return 0;
}
```
答案:
第1空:pa = a;
第2空:digit = *(pstr + i - 1) - '0';
第3空:*pa = digit;
```c++
#include
#include
int main(void)
{
char str[80], *pstr;
int i, j, k, m, e10, digit, ndigit, a[80], *pa;
gets(str);
pstr = str; /* 字符指针pstr置于数组str首地址 */
/* 指针pa置于a数组首地址 */
ndigit = 0; /* ndigit代表有多少个整数 */
i = 0; /* 代表字符串中第n个字符 */
j = 0; /* 代表连续数字的位数 */
while (1)
{
if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
{
j++;
}
else
{
if (j > 0)
{
/* 将个位数赋予digit */
k = 1;
while (k < j)
{
e10=1;
for (m=1; m<=k; m++)
{
e10=e10*10; /* e10代表该位数所应乘的因子 */
}
digit = digit + (*(pstr + i - 1 - k) - '0') * e10;
k++;
}
/* 将数值赋予数组a */
ndigit++;
pa++;
j = 0;
}
}
if ('\0' == *(pstr + i))
{
break;
}
i++;
}
printf("There are %d numbers in this line.They are:\n", ndigit);
for(j=0; j
printf("%d ", a[j]);
}
printf("\n");
return 0;
}
```
答案:
第1空:pa = a;
第2空:digit = *(pstr + i - 1) - '0';
第3空:*pa = digit;