
十万火急。一道简单的C语言的编程,高手必看!
输入一个字符串,内有数字字符和非数字字符,如123a345bcd567,将其中连续的数字作为一个整体,依次放到一数组a中,例如123放在a[0]中,345放在a[1]中,...
输入一个字符串,内有数字字符和非数字字符,如123a345bcd567,将其中连续的数字作为一个整体,依次放到一数组a中,例如123放在a[0]中,345放在
a[1]中,567放在 a[2]中,...... 统计共有多少个整数,并输出这些整数。 展开
a[1]中,567放在 a[2]中,...... 统计共有多少个整数,并输出这些整数。 展开
2个回答
展开全部
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char input[1024];//用来存放输入的字符串,定义为1024大小,不够可以自己增加
int len;//用来保存读入字符串的长度
int a[1024];//用来保存计算后的整数
int count=0;//保存整数个数
int i=0;//遍历input用
int sum=0;//每次计算一个整数时用来累加
char c;//每次从input中取来一个字符放到c中
int flag=2;//刚开始设置为2,1代表一个整数已被保存设置为,0代表一个整数还需要保存
scanf("%s",input);//从键盘读入这个字符串
len=strlen(input);
while(i<len)
{
c=input[i];
if(isdigit(c))//如果c是一个数字的话要处理
{
flag=0;//flag置为0,表示如果某次遇到了一个字符那么sum里的整数需要保存
sum=sum*10+(c-48);/*将c有字符转换为数字,0的ascii码为48,故需要减去48,
把记录在sum里的数*10,在加上这次读的数
例如28后面如果在有个三那结果就是28*10+3;*/
}
else
{
if(flag==0)/*读字符串的时候遇到一个字母,那判断flag是否为0,如果是说明sum里有需要保存的数,
123ab,在这个例子中如果计算完123,那么遇到a时就保存这个数*/
{
a[count]=sum;//放到数组里
count++;//计数加1
sum=0;//累加和要清0
flag=1;/*123ab这个例子,遇到a需要保存,则遇到b就不需要在保存一次,故flag置为1,表示数已保存完*/
}
}
i++;//读下一个字符
}
if(flag==0)/*11ab11
因为都是在每次遇到字母的时候保存数字,可能出现最后一个数字没保存,所以最后判断flag,看
是否还有最后一个没保存*/
a[count]=sum;
count++;
printf("共有%d个整数\n",count);
for(i=0;i<count;i++)
printf("%d\n",a[i]);
return 0;
}
够详细吧,我可是一句一句的给你注释
#include<ctype.h>
#include<string.h>
int main()
{
char input[1024];//用来存放输入的字符串,定义为1024大小,不够可以自己增加
int len;//用来保存读入字符串的长度
int a[1024];//用来保存计算后的整数
int count=0;//保存整数个数
int i=0;//遍历input用
int sum=0;//每次计算一个整数时用来累加
char c;//每次从input中取来一个字符放到c中
int flag=2;//刚开始设置为2,1代表一个整数已被保存设置为,0代表一个整数还需要保存
scanf("%s",input);//从键盘读入这个字符串
len=strlen(input);
while(i<len)
{
c=input[i];
if(isdigit(c))//如果c是一个数字的话要处理
{
flag=0;//flag置为0,表示如果某次遇到了一个字符那么sum里的整数需要保存
sum=sum*10+(c-48);/*将c有字符转换为数字,0的ascii码为48,故需要减去48,
把记录在sum里的数*10,在加上这次读的数
例如28后面如果在有个三那结果就是28*10+3;*/
}
else
{
if(flag==0)/*读字符串的时候遇到一个字母,那判断flag是否为0,如果是说明sum里有需要保存的数,
123ab,在这个例子中如果计算完123,那么遇到a时就保存这个数*/
{
a[count]=sum;//放到数组里
count++;//计数加1
sum=0;//累加和要清0
flag=1;/*123ab这个例子,遇到a需要保存,则遇到b就不需要在保存一次,故flag置为1,表示数已保存完*/
}
}
i++;//读下一个字符
}
if(flag==0)/*11ab11
因为都是在每次遇到字母的时候保存数字,可能出现最后一个数字没保存,所以最后判断flag,看
是否还有最后一个没保存*/
a[count]=sum;
count++;
printf("共有%d个整数\n",count);
for(i=0;i<count;i++)
printf("%d\n",a[i]);
return 0;
}
够详细吧,我可是一句一句的给你注释
展开全部
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void main()
{
char str[256],*p=str;
int *a,n,i;
gets(str);
a=(int *)malloc(sizeof(int)*(strlen(str)/2+1));
n=0;
while(1)
{
while((*p<'0' || *p>'9') && *p) p++;
if(*p)
{
a[n++]=atoi(p);
while(*p>='0' && *p<='9') p++;
}
else break;
}
printf("%d integers:",n);
for(i=0;i<n;i++) printf("%d ",a[i]);
free(a);
}
#include "string.h"
#include "stdlib.h"
void main()
{
char str[256],*p=str;
int *a,n,i;
gets(str);
a=(int *)malloc(sizeof(int)*(strlen(str)/2+1));
n=0;
while(1)
{
while((*p<'0' || *p>'9') && *p) p++;
if(*p)
{
a[n++]=atoi(p);
while(*p>='0' && *p<='9') p++;
}
else break;
}
printf("%d integers:",n);
for(i=0;i<n;i++) printf("%d ",a[i]);
free(a);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询