用户输入魔王语言->将魔王语言中的魔王词汇根据转换规则转换为人类语言->将人类语言根据预定义的中文字符转换并输出?
用户输入的魔王语言包括大写字母、括号、小写字母?
转换规则为:魔王词汇->人类词汇
魔王词汇包括纯大写字母词汇和括号包围的小写字母,
人类词汇只有小写字母?
假设存在如下转换:
ABC ->cba AB ->ba C ->c
输入魔王语言ABC,那么转换的人类语言应为cba还是bac或者两者皆考虑?
你把#include "SqStack.h" //顺序栈类头文件
#include "SqQueue.h" //循环队列类头文件
这两个实现放上来吧。
.cpp 和 .h 文件都要。否则没有办法调试的。
虽然这个实验是"栈和队列"这章的,但并不表示你的程序中一定要用到队列啊.把程序中的队列改成另一个栈就行了.
修改后的程序如下:
#include
<stdio.h>
#include
<malloc.h>
#define
STACK_INIT_SIZE
100
#define
STACKINCREMENT
10
typedef
struct
{
int
*base
int
*top
int
stacksize
}SqStack
void
InitStack(SqStack
&S)
//构造一个新栈S
bool
StackEmpty(SqStack
&S)
void
Push(SqStack
&S,
char
e)
//把e入栈
void
Pop(SqStack
&S,
char
&e)
//把栈顶元素出栈,赋值给e
void
InitStack(SqStack
&S)
//这里你原来写的是InitSack,要改过来
{
S.base
=
(int
*)malloc(STACK_INIT_SIZE
*
sizeof(int))
S.top
=
S.base
S.stacksize
=
STACK_INIT_SIZE
}
bool
StackEmpty(SqStack
&S)
{
return
S.top
==
S.base
}
void
Push(SqStack
&S,
char
e)
{
if(S.top
-
S.base
>=
S.stacksize)
{
S.base
=
(int
*)realloc(S.base,
(S.stacksize
+
STACKINCREMENT)
*
sizeof(int))
S.top
=
S.base
+
S.stacksize
S.stacksize
+=
STACKINCREMENT
}
*(S.top++)
=
e
}
void
Pop(SqStack
&S,
char
&e)
{
if(S.top
!=
S.base)
{
e
=
*(--S.top)
}
}
int
main()
{
char
e,
h,
eve,
cs,
css[100]
int
k
=
0
SqStack
S
InitStack(S)
while(scanf("%c",
&cs)
!=
EOF)
{
if(cs
==
'#')
break
else
{
css[k]
=
cs
k++
}
}
for(int
i
=
k
-
1
i
>=
0
i--)
{
if(')'
==
css[i])
{
//这里把临时队列改成临时栈,下面相应的队列 *** 作都改成栈 *** 作
SqStack
temp
InitStack(temp)
i--
while('('
!=
css[i])
{
Push(temp,
css[i])
i--
}
Pop(temp,eve)
while(!StackEmpty(temp))
{
Push(S,
eve)
Pop(temp,
h)
Push(S,
h)
}
Push(S,
eve)
i--
if('A'
==
css[i])
{
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
}
if('B'
==
css[i])
{
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
Push(S,
'd')
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
Push(S,
't')
}
}
else
{
if('A'
==
css[i])
{
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
}
if('B'
==
css[i])
{
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
Push(S,
'd')
Push(S,
'e')
Push(S,
'a')
Push(S,
's')
Push(S,
't')
}
}
}
while(!StackEmpty(S))
{
Pop(S,
e)
printf("%c",
e)
}
printf("\n")
return
0
}
请参考
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)