这个厉害了,题目有点难,是我在纸上推演,写出关键代码,然后再在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]);
}
}