输入一个字符串,内有数字和非数字字符,例如
A123x456 1789?302TAB5876
将其中连续的数字作为一个整数,依次存放到一数组a中,如123放在a[0],456放在a[1]中;
#include<stdio.h>int main(){ int i,j,k,digit,ndigit,e10,m,a[10],*pa; char str[50],*pstr; printf("please input string:/n"); gets(str);
pa=&a[0]; pstr=&str[0]; ndigit=0; i=0; j=0; while(*(pstr+i)!='/0') { //忘记写=等于号了,应该是">=" if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))//刚开始以为要用while;其实用if效果一样;注意相与的时候要加括号 j++; else//注意else作用域是下面这个花括号;不包括i++; { if(j>0) { //将个位数赋予digit; digit=*(pstr+i-1)-48;//0~9的ascii码是30h~39h;减去48将它变为十进制; k=1;//k个位数 while(k<j) { e10=1;//该位数所应乘的因子; for(m=1;m<=k;m++)//k如果大于2;计算e10的因子; e10=e10*10; digit=digit+(*(pstr+i-1-k)-48)*e10;//将十位百位数的数字乘以e10; k++;//数位k自增; } *pa=digit;//将数值赋予数组a; ndigit++; pa++;//指针pa指向a数组下一元素; j=0;//一个数结束;初始j=0; } } i++; } printf("this string total have %d digit/n",ndigit); pa=&a[0];//如果没有重新赋值pa指向a首地址;输出值就不正确;因为pa值变化了,所以需要重新赋值; for(j=0;j<ndigit;j++)//总共有ndigit个数字个数;所以j<ndigit; printf("%8d",*(pa+j));//如果%4d因为不够宽,输出的两个数字连在一起了; printf("/n"); return 0;}
