输入一个字符串,内有数字和非数字字符,例如 A123x456 17960? 302tab5876 操作:将连续的数字作为一个整数,一次存放到一数组a中,例如123存放在a【0】中,456放在a【1】中
#include <stdio.h>
#include <stdlib.h>
#define max 10
/* 输入:输入一个字符串,内有数字和非数字字符,例如 A123x456 17960? 302tab5876
操作:将连续的数字作为一个整数,一次存放到一数组a中,例如123存放在a【0】中,456放在a【1】中……
结果输出:统计共有多少个整数,并输出这些数*/
//the undefine the number ,
int main(int argc, char *argv[]) {
//char str[]={"A","1","2","3","x","4","5","6"," ","1","7","9","6","0","?","3","0","2","t","a","5","8","7","6"," "};// total:25
char str[30];
gets(str);
char z;
int transnum=0;
int flag=0;
int j=0;
int a[20];
int i=0;
char *st=&str[0];// 等同于:char *st=str;
// 注意数组首地址并不等同于指针。
//printf("test the value :%c",*(st+i));
while((z=*(st+i))!=" ") // 如果没有遇到结束符的话
{
if(z>="0"&&z<="9") //如果遇到数字字符的话
{
transnum=transnum*10+(z-"0"); //学会字符串转成数字的方法
/*就将transformation... 1、1 2、12 3、123 4、进行转存后然后就是i++ 操作,
and then 进行到可以看下一组数字,有进行transnum
*/
flag=1;
}
else
{
if(flag==1) //遇到非数字的之后 保存前面的数字 flag=1 意思是前面是数字
{
a[j++]=transnum;
transnum=0; // trannum 归为0,不然的话会造成123456 连续进行乘加法
}
flag=0;
}
i++;// 过一个字符就自增一次
}
if(flag==1)//最后结束符跳出了,但是数字还没有保存 flag=1 意思是前面是数字 所以while循环后保存数字到a[]数组中
{
a[j++]=transnum;
}
a[j]=" ";//注意最后加上" ",不然最后输出会有问题,当然也可以按照<j来输出,但是这样更加严谨
int *ast=a; //指针指向数组的首地址
printf("there are %d numbers in this line ,they are
",j); //THE TOTAL NUMBER COUNT
i=0; //i归零
while(*(ast+i)!=" ")
{
printf("%d ",*(ast+i)); //指针指向输出
i++; //勿忘i要进行自增
}
return 0;
}总结:一个程序两点陆陆续续到六点多。。。。
虽然思想不难,其中很多细节仍要处理清楚,很容易错误,我改了大约10处小错误。真的是可以的。不过也是印象深刻了,嘿嘿 。。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
