用C或C++实现一个魔王语言解释器。

用C或C++实现一个魔王语言解释器。,第1张

能否详细说明?

用户输入魔王语言->将魔王语言中的魔王词汇根据转换规则转换为人类语言->将人类语言根据预定义的中文字符转换并输出?

用户输入的魔王语言包括大写字母、括号、小写字母?

转换规则为:魔王词汇->人类词汇

魔王词汇包括纯大写字母词汇和括号包围的小写字母,

人类词汇只有小写字母?

假设存在如下转换:

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

}

请参考


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7949513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存