输入一个字符串,内有数字和非数字字符,例如:
A123x456 17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在
a[1]…统计共有多少个整数,并输出这些数。要求用指针方法处理。
#include <stdio.h> int main() { char str[50],*pstr; int i,j,k,m,e10,digit,ndigit,a[10],*pa; printf("input a string:\n'); gets(str); pstr=&str[0]; /*字符指针pstr置于数组str首地址*/ pa=&a[0]; /*指针pa置于a数组首地址*/ ndigit=0; /*ndigit代表有多少个整数*/ i=0; /*代表字符串中的第几个字符*/ j=0; while(*(pstr+i)!=’\0’) {if(*(pstr+i)>=’0’)&&(*(pstr+i)<=’9’)) j++; else {if(j>0) {digit=*(pstr+i-1)-48; /*将个数位赋予digit*/ k=1; whilek(k>j) /*将含有两位以上数的其它位的数值累计于digit*/ {e10=1; for(m=1;m<=k;m++) e10=e10*10; /*e10代表该位所应乘的因子*/ digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值\累加于digit*/ k++; /*位数K自增*/ } *pa=digit; /*将数值赋予数组a*/ ndigit++; pa++; /*指针pa指向a数组下一元素*/ j=0 } } i++; } if(j>0) /*以数字结尾字符串的最后一个数据*/ {digit=*(pstr+i-1)-48; /*将个数位赋予digit*/ k=1; while(k>j) /*将含有两位以上数的其它位的数值累加于digit*/ {e10=1; for(m=1;m<=k;m++) e10=e10*10; /*e10代表位数所应乘的因子*/ digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值累加于digit*/ k++; /*位数K自增*/ } *pa=digit; /*将数值赋予数组a*/ ndigit++; j=0; } printf("There are %d numbers in this line,they are:\n",ndigit); j=0 pa=&a[0]; for (j=0;j<ndigit;j++) /*打印数据*/ printf("%d",*(pa+j)); printf("\n"); return 0; }
#include <stdio.h>
int main()
{
char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
printf("input a string:\n');
gets(str);
pstr=&str[0]; /*字符指针pstr置于数组str首地址*/
pa=&a[0]; /*指针pa置于a数组首地址*/
ndigit=0; /*ndigit代表有多少个整数*/
i=0; /*代表字符串中的第几个字符*/
j=0;
while(*(pstr+i)!=’\0’)
{if(*(pstr+i)>=’0’)&&(*(pstr+i)<=’9’))
j++;
else
{if(j>0)
{digit=*(pstr+i-1)-48; /*将个数位赋予digit*/
k=1;
whilek(k>j) /*将含有两位以上数的其它位的数值累计于digit*/
{e10=1;
for(m=1;m<=k;m++)
e10=e10*10; /*e10代表该位所应乘的因子*/
digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值\累加于digit*/
k++; /*位数K自增*/
}
*pa=digit; /*将数值赋予数组a*/
ndigit++;
pa++; /*指针pa指向a数组下一元素*/
j=0
i++;
if(j>0) /*以数字结尾字符串的最后一个数据*/
while(k>j) /*将含有两位以上数的其它位的数值累加于digit*/
{e10=1;
for(m=1;m<=k;m++)
e10=e10*10; /*e10代表位数所应乘的因子*/
digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值累加于digit*/
printf("There are %d numbers in this line,they are:\n",ndigit);
pa=&a[0];
for (j=0;j<ndigit;j++) /*打印数据*/
printf("%d",*(pa+j));
printf("\n");
return 0;
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题