输入一字符串,内有数字和非数字字符,例如:A123x456 17960?302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……统计有

输入一字符串,内有数字和非数字字符,例如:A123x456 17960?302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……统计有多少个整数,并输出这些数。

谭浩强C程序设计(第五版)习题8-16
主要思路是:相邻连续数字的差是1

#include <stdio.h>
#define N 50
int isContinuous(char *str,int *p);

int main(void)
{
	int i;
	char s[N];
	int a[N];
	int *point=a;
	//int* temp=point;
	int cnt;
	gets(s);//使用gets字符串输入函数,空格也会算作一个字符 
	 
	printf("%s\n",s);
	cnt=isContinuous(s,point);
	point=a;
	printf("该字符串中一共有%d个连续的数字\n",cnt);
	for(i=0;i<cnt;i++){
	
		printf("%d\n",*(point+i));
	}
	return 0;
}
int isContinuous(char *str,int *p)
{
	int i=0,j,temp,sum=0,n=0;//n用来统计这个字符串中总共有多少个连续数字 
	int flag=0;//用来标志连续数字 
	while(*(str+i) != '\0')
	{
		if(*(str+i)>='0' && *(str+i)<='9')
		{
			temp=*(str+i)-'0';//将数字字符转换为数字 
		}else{
			i++;
			continue;
		}
	
		j=i+1;
	
				if((*(str+j)>='0' && *(str+j)<='9')&&((*(str+j)-'0')-temp==1)){
					
						if(!flag){
							sum=temp*10+(*(str+j)-'0');
						}else{
							sum=sum*10+(*(str+j)-'0');
						} 
						
						//temp=*(str+j)-'0';
						flag=1;
					}
					else{
						//进入到else里说明不是连续数字、非数字字符、数字连续性结束 
						if(flag){
							//该逻辑判断作用于连续性数字结束  非数字字符进入else不会进行该逻辑判断 
							n++;
							*(p++)=sum;
						}
						 
						flag=0;//标志本轮连续数字已经结束 
						sum=0;
					
				}
			
					
		
		i++;
		
	}
	
	return n;
}

运行结果示例:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值