输入一个字符串,内有数字和非数字字符,例如:
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;
}
运行结果: