输入一个字符串,将其中连续的数字作为一个整数,依次存放到数组a中。 例如:字符串为 ab123&gh6741kpen589,则将123存在a[0]中,6741存在a[1]中,589存在a[2]中

对于其中的代码我稍微的修改了一下

输入一个字符串,将其中连续的数字作为一个整数,依次存放到数组a中。
例如:字符串为 ab123&gh6741kpen589,则将123存在a[0]中,6741存在a[1]中,589存在a[2]中

#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','\0'};// 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))!='\0') //  如果没有遇到结束符的话 
	{
	
		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,还没有存入数组
	{
		a[j++]=transnum;
	}	
	a[j]='\0';//注意最后加上'\0',不然最后输出会有问题,当然也可以按照<j来输出,但是这样更加严谨 
	int *ast=a; //指针指向数组的首地址 
	printf("there are %d numbers in this line ,they are \n",j); //THE TOTAL NUMBER COUNT 
	i=0; //i归零 
	while(*(ast+i)!='\0')
	{
	  	
		printf("%d ",*(ast+i)); //指针指向输出 
		i++;  //勿忘i要进行自增 
	}
	
	
	return 0;
}

一个C语言题目,引用一下

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值