当前位置: 代码迷 >> C语言 >> 从字符串中挑出数字,为什么不对
  详细解决方案

从字符串中挑出数字,为什么不对

热度:118   发布时间:2007-12-22 23:07:33.0
从字符串中挑出数字,为什么不对
#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函数可以这么写.
----------------解决方案--------------------------------------------------------
  相关解决方案