//输入一个字符串,内有数字和非数字字符,如a123X456 17960? 302tab5876 将其中连续的数字作为一个整数,
//一次存放到整数型数组a中,例如123放到 a[0],456放到 a[1]中,统计有多少个整数,并输出这些数;
#include <stdio.h>
#include <string.h>
void main()
{
char b[100];
int a[100];
memset(a,'\0',100);
char *p = b;
int i = 0;
int j;
int sum = 0;
int count = 0;
int flag = 1;//标志位,遇到数字为0,遇到非数字为1;此处其初始值为1,默认首字符前面还是非数字,不输出整数,主要配合下面的程序
printf("请输入字符串:\n");
gets(b);
while(*p )
{
if(*p <= '9' && *p >= '0')
{
flag = 0;//遇到数字,flag=0
sum = sum*10 + *p++ - '0';//将字符数字转化成整数,此时并不输出。当下一个字符为非数字时,才输出
}
else
{
while(flag == 0)//此时读到非数字字符,判断此时flag,如果此时flag为0.说明上一个字符为数字
{
a[i++] = sum ;//此时将数字输出,赋给a[i],i++
sum = 0;//将sum清零
flag = 1;//非数字字符,flag置1
}
p++;//此时flag为1,没有整数输出,则看下一个字符
}
}
//字符串结束后,会遇到两种情况,一个是最后一个字符为数字,另一种是非数字字符
if(flag == 0)//因为前面的程序中,整数的下一个字符为非数字时,才会输出整数,若最后一个是数字的话,则无法输出,所以这里对最后一个字符进行判断
a[i] = sum;//将最后一个整数输出
else
i--;//此时最后一个字符为非数字,没有整数输出,但i多加了一次,所以此处i--
count = i + 1;//整数个数为i+1
printf("共有%d个整数\n",count);
printf("这些整数是:\na[]=");
for(j = 0; j < i+1; j++)
printf("%d ",a[j]);
printf("\n");
}
//一次存放到整数型数组a中,例如123放到 a[0],456放到 a[1]中,统计有多少个整数,并输出这些数;
#include <stdio.h>
#include <string.h>
void main()
{
char b[100];
int a[100];
memset(a,'\0',100);
char *p = b;
int i = 0;
int j;
int sum = 0;
int count = 0;
int flag = 1;//标志位,遇到数字为0,遇到非数字为1;此处其初始值为1,默认首字符前面还是非数字,不输出整数,主要配合下面的程序
printf("请输入字符串:\n");
gets(b);
while(*p )
{
if(*p <= '9' && *p >= '0')
{
flag = 0;//遇到数字,flag=0
sum = sum*10 + *p++ - '0';//将字符数字转化成整数,此时并不输出。当下一个字符为非数字时,才输出
}
else
{
while(flag == 0)//此时读到非数字字符,判断此时flag,如果此时flag为0.说明上一个字符为数字
{
a[i++] = sum ;//此时将数字输出,赋给a[i],i++
sum = 0;//将sum清零
flag = 1;//非数字字符,flag置1
}
p++;//此时flag为1,没有整数输出,则看下一个字符
}
}
//字符串结束后,会遇到两种情况,一个是最后一个字符为数字,另一种是非数字字符
if(flag == 0)//因为前面的程序中,整数的下一个字符为非数字时,才会输出整数,若最后一个是数字的话,则无法输出,所以这里对最后一个字符进行判断
a[i] = sum;//将最后一个整数输出
else
i--;//此时最后一个字符为非数字,没有整数输出,但i多加了一次,所以此处i--
count = i + 1;//整数个数为i+1
printf("共有%d个整数\n",count);
printf("这些整数是:\na[]=");
for(j = 0; j < i+1; j++)
printf("%d ",a[j]);
printf("\n");
}