数字中间化(串)
时间: 1ms 内存:128M
描述:
将一串字符串中的数字放入到字符串中间,没有数字或全是数字则原样输出
输入:
一串字符串
输出:
中间化后的字符串
示例输入:
adf2adf23424afa
示例输出:
adfa223424dfafa
提示:
参考答案(内存最优[752]):
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000
typedef struct{
char *base;
char *top;
}Stack;
void InitStack(Stack *S){
S->base=S->top=malloc(sizeof(char)*MAXSIZE);
}
void Push(Stack *S,char c){
*S->top++=c;
}
int Empty(Stack *S){
if(S->base==S->top)
return 1;
return 0;
}
void play(Stack *S){
*(S->top)=0;
puts(S->base);
}
void play1(Stack *S,Stack *T){
int i,n=(T->top-T->base)/2;
for(i=0;i<n;i++)
printf("%c",*(T->base+i));
*(S->top)=0;
*(T->top)=0;
printf("%s%s\n",S->base,(T->base+i));
}
int main(){
char c;
Stack s,t;
InitStack(&s);
InitStack(&t);
while((c=getchar())!=EOF){
if(c>='0' && c<='9')
Push(&s,c);//存数字
else
Push(&t,c);//存字符
}
if(Empty(&s))
play(&t);
else
if(Empty(&t))
play(&s);
else
play1(&s,&t);
return 0;
}
参考答案(时间最优[0]):
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000
typedef struct{
char *base;
char *top;
}Stack;
void InitStack(Stack *S){
S->base=S->top=malloc(sizeof(char)*MAXSIZE);
}
void Push(Stack *S,char c){
*S->top++=c;
}
int Empty(Stack *S){
if(S->base==S->top)
return 1;
return 0;
}
void play(Stack *S){
*(S->top)=0;
puts(S->base);
}
void play1(Stack *S,Stack *T){
int i,n=(T->top-T->base)/2;
for(i=0;i<n;i++)
printf("%c",*(T->base+i));
*(S->top)=0;
*(T->top)=0;
printf("%s%s\n",S->base,(T->base+i));
}
int main(){
char c;
Stack s,t;
InitStack(&s);
InitStack(&t);
while((c=getchar())!=EOF){
if(c>='0' && c<='9')
Push(&s,c);//存数字
else
Push(&t,c);//存字符
}
if(Empty(&s))
play(&t);
else
if(Empty(&t))
play(&s);
else
play1(&s,&t);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。