这要综合用到字符串读入和栈操作,简单起见可以给你一个伪代码:
//先建栈并定义其基本函数
typedef int datatype;
datatype x;
typedef struct{
datatype data[maxsize];
int top;
}zhan;
zhan *s;
void setnull(zhan *s)
{
s->top=-1;
}/*置空*/
int empty(zhan *s)
{
if(s->top<=-1)
return(1);
else return(0);
}
zhan *insert(zhan *s,datatype x)
{
if(s->top==maxsize-1)
{
printf("溢出");
return NULL;
}
else
{s->top++;
s->data[s->top]=x;
}
return s;
}
datatype pop(zhan *s)
{
if(!empty(s)
return s->data[s->top--];
}
//读入字符串,通过连续字符入栈出栈提取并还原它们。
m=0//m是数组下标变量
for(i=0;;i++)
{
ch=getchar();//读入字符
if(ch=='\n')//换行终止
break;
if('0'<=ch<='9')//数字开始,入栈
insert(s,ch);
else if(!empty(s)){//有非数字字符插入,一个完整数字结束,出栈还原
k=j=0
while(!empty(s)){
k=k+int(pop(s))*10^j
j=j+1
}
a[m]=k
m++
}
}
最后,组织一下,main函数加上去,就差不多了。
是这道题吗?
输入一个字符串,内有数字和非数字字符,如:a123x456 17960?302tab5876 将其中连续的数字作为一个整数,依次存放到一维数组a中(例如,123放在a[0]中,456放在a[1]中),统计共有多少个整数,并输出这些数。
#include
#include
void main()
{char s[100];int a[15]={0},n,i,j,t=0,flag=0;
gets(s);
n=strlen(s);
for(i=0;i
{a[t]=a[t]*10+s[i]-48;i++;break;}
for(;i
if(s[i]>='0'&&s[i]<='9')a[t]=a[t]*10+s[i]-48;
else {if(flag)t++;flag=0;}}
printf("共有%d个这样的数",t+1);
for(j=0;j<=t;j++)
printf("\n第%d个数为%d",j+1,a[j]);
}
只需要用正则匹配即可
用\d+匹配整个字符串,然后对每一个结果用itoa就可以了,自己写的还很容易出错,而且效率不高