从字符串中挑出数字,为什么不对
#include<stdio.h>#include<string.h>
void main()
{ void pick(char *s,int number[]);
char s[20];int number[20]={0};int i;
printf("please input a string:\n");
scanf("%s",s);
pick(s,number);
printf("the string is %s\n",s);
printf("the number is:\n");
for(i=0;number[i]!=0;i++)
printf("%d",number[i]);
}
void pick(char *s,int number[]);
{
char *p;
p=s;
char *q;int n=0;int *t=number;
q=p;
while(*p!='\0')
{ while(!(*p>='0'&&*q<='9'))p++;
q=p;
while(*q>='0'&&*q<='9')
{n=(n+*q-'0')*10;q++;
}
n/=10;*t=n;t++;p=q;
}
}
----------------解决方案--------------------------------------------------------
我只能挑出编译的错误,第二个 void pick(char *s,int number[]);
不应该有分号。不是声明语句。 p=s;语句应该在 char *q;int n=0;int *t=number;后边。
----------------解决方案--------------------------------------------------------
难道0不算数字?
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<string.h>
void main()
{ void pick(char *s, int number[]);
char s[20];int number[20]={0};int i; clrscr();
printf("please input a string:\n");
scanf("%s",s);
pick(s,number);
printf("the string is: %s\n",s);
printf("the number is:\n");
for(i=0;number[i]!=0;i++)
printf("%d ",number[i]);
}
void pick(char *s, int number[])
{
char *p;
char *q;int n=0; int *t=number;
p=s;
q=p;
while(*p!='\0')
{ while(!(*p>='0'&&*p<='9'))p++;
q=p; n=0;
while(*q>='0'&&*q<='9')
{n=(n+*q-'0')*10;q++;
}
n/=10;*t=n;t++;p=q;
}
}
OK了
----------------解决方案--------------------------------------------------------
只指出问题
两点问题,1,PICK函数太复杂,根本不用这么复杂, while(*p!='\0')循环里面只要个
if
不是数字, 取下一个字符
else
是数字, 将 其减字符'0' 得相应的整数,送入数组保存
就可以搞定
2, number[ ]数组 预送的整数不应该是0, 最好是-1 , 因为0也可能是串中挑出来的数字.
----------------解决方案--------------------------------------------------------
回复 4# 的帖子
你试试输入这个fasdvds848948948915164864 ----------------解决方案--------------------------------------------------------
回复 1# 的帖子
楼主创建number数组的目的应该是把每个数字放进去number的每一项(这是我的理解),但是你输出一下整个number数组,就会发现你的所有数只是在number[0]上,剩下的全部是0 ----------------解决方案--------------------------------------------------------
楼主问题没说清楚
其实不是挑出单个数字,而是将串中连续的数字当成一个整数.那pick函数可以这么写. ----------------解决方案--------------------------------------------------------