C语言练习作业(七)

这个厉害了,题目有点难,是我在纸上推演,写出关键代码,然后再在IDE里面补全的。

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

下面是代码:


#include<stdio.h>
#include<string.h>

void numberPickup(char *str);

int main()
{
	char str[100];
	printf_s("请输入一串字符,包含数字与非数字:\n");
	gets_s(str, 99);
	numberPickup(str);

	return 0;
}

void numberPickup(char *str)
{
	int isNumber = 0;//记录现在是否在数字范围内
	int isValueable = 0;//判断现在是否将值赋给数组a
	int t = 0;//记录字符的数字
	char *p;//指向字符数组的指针
	int *q;//指向数字数组的指针
	int a[100];//记录数字的数组
	int k = 0;//记下共提取出了多少个数字,便于最后输出
	p = str;
	int j = 0;//用来判断,当现在指向非数字字符时,数字是否曾出现过,判断后应归零,不然程序会将下一位字符当数字输出
	int length = 0;//字符数组的长度
	length = strlen(str);
	q = a;
	for (int i = 0; i <= length; p++, i++)
	{
		if (*p >= '0'&&*p <= '9')
		{
			isNumber = 1;
			t = (*p - 48) + t * 10;//字符数字转化成纯数字应该减48
			j++;
		}
		else
		{
			isNumber = 0;
			if (j > 0)//如果没有,当第一个字符是非数字时,程序会将第一个字符当数字输出
			{
				isValueable = 1;//数字已经记录完毕,可以开始赋值
				j = 0;
			}
		}
		if (isValueable == 1)//开始赋值
		{
			*q = t;
			q++;
			t = 0;
			k++;
			isValueable = 0;
		}
	}
	for (int i = 0; i < k; i++)
	{
		printf_s("%d  ", a[i]);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值