2021.12.16 输入一个字符串,内有数字和非数字字符,统计其*有多少个整数

输入一个字符串,内有数字和非数字字符,例如:

                                                        A123x456 17960? 302tab5876

将其中连续的数字作为一个整数,依次存放到一组数A中,例如,123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。

分析:从题目中,我们可以看出有数字123,456,17960,302,5876,而且特点是两个数字之间存在非数字字符,我们可以从这一点入手,代码如下

#include<stdio.h>
#include<string.h>
#include <ctype.h>
#include<stdlib.h>
#include<assert.h>
int Get_str_Num_Count(const char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		if (isdigit(*str) && !isdigit(*(str + 1)))//判断是数字且是非数字字符
		{
			count++;
		}
		str++;
	}

	return count;
}

int* get_str_num(const char* str)
{
	bool tag = false;
	int n = Get_str_Num_Count(str);
	int* arr = (int*)malloc(n * sizeof(int));   //申请一个动态数组去存放
	assert(arr != NULL);

	int sum = 0;
	int k = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))    
		{
			tag = true;
			sum = sum * 10 + (*str - '0');
		}
		else
		{
			if (tag)
			{
				arr[k] = sum;
				k++;
				sum = 0;
				tag = false;
			}
		}
		str++;
	}

	if (tag)
	{
		arr[k] = sum;
	}

	return arr;
}

int main()
{
	const char* str = "A123x456 17960? 302tab5876";
	int* p = get_str_num(str);
	int len = Get_str_Num_Count(str);

	for (int i = 0; i < len; i++)
	{
		printf("%d\n", p[i]);
	}
	return 0;
}

运行结果:

2021.12.16 输入一个字符串,内有数字和非数字字符,统计其*有多少个整数

 

上一篇:线段树小记


下一篇:Android7.1 关闭路由器DHCP后还能获取到ip地址