习题3.18 检测平衡符号(/* */ 不知怎么做)

/* 检测平衡符号 */
#include<stdio.h>
#include<stdlib.h>

struct stack;
typedef struct stack * PtrToStack;
struct stack{
    char *Array;
    int TopOfStack;
    int Capacity;
};
PtrToStack
CreateStack( int MaxSize )
{
    PtrToStack p;
    p = malloc(sizeof(struct stack));
    p->Array = malloc(sizeof(char) * MaxSize );
    p->Capacity = MaxSize;
    p->TopOfStack = -1;
    return p;
}
int
IsEmpty( PtrToStack s)
{
    return s->TopOfStack == -1;
}
void
Pop( PtrToStack s )
{
    if( !IsEmpty( s ) )
        s->TopOfStack--;
    else
        printf("error");
}
char
Top( PtrToStack s )
{
    if( !IsEmpty( s ) )
        return s->Array[s->TopOfStack];
    else
        printf("error");
}

int
IsFull( PtrToStack s )
{
    return s->TopOfStack == s->Capacity-1;
}

void
Push( char ch, PtrToStack s)
{
    if( !IsFull(s) )
        s->Array[++s->TopOfStack] = ch;
    else
        printf("error");
}
//遇到开放符号栈空,遇到开放符号不匹配,读入完成,栈不空
int main()
{
    int MaxSize = 10;
    char tmp;
    PtrToStack s;
    s = CreateStack( MaxSize );
    while( ( tmp = getchar() ) != ‘#‘ )
    {
        if( tmp == ‘(‘ || tmp == ‘{‘ || tmp == ‘[‘)
            Push( tmp, s );
        else
        {
            if( IsEmpty(s) ){
                printf("error1");
                return 0;
            }
            else
            {
                switch( tmp )
                {
                    case ‘]‘:
                        if(Top(s) != ‘[‘)
                        {
                            printf("error2");
                            return 0;
                        }
                        break;
                    case ‘)‘:
                        if(Top(s) != ‘(‘ )
                        {
                            printf("error2");
                            return 0;
                        }
                        break;
                    case ‘}‘:
                        if(Top(s) != ‘{‘)
                        {
                            printf("error2");
                            return 0;
                        }
                        break;
                }//switch
                Pop(s);
            }//else
        }//else
    }//while
    if(s->TopOfStack != -1)
    {
        printf("error3");
        return 0;
    }
}

注意该算法3个error:1.读到封闭符号时,栈空error1

           2.读到#栈非空error2

          3.读到封闭符号,栈非空,可是不对应error3

时间: 2024-08-11 04:56:05

习题3.18 检测平衡符号(/* */ 不知怎么做)的相关文章

C++ Primer 第四版课后练习解答 习题1.18

注意:本随笔是直接参考<C++Primer(第四版)习题解答(完整版)>中的.此处主要是便于本人以后反复阅读. 习题1.18 编写程序,提示用户输入两个数并将这两个数范围内的每个数写到标准输出. [解答] while循环实现 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int v1, v2, low,up; 7 cout << "Enter tow numbers &quo

栈应用之平衡符号

栈的应用:检查每件事情是否能成对出现,算法叙述: 做一个空栈.读入字符直到文件结尾.如果字符是一个开放符号,则将其推入栈中.如果字符是一个封闭符号,则当栈为空时报错.否则,将栈元素弹出.如果弹出的符号不是对应的开放符号,则报错.在文件结尾,如果栈非空则报错. public class BalanceSigned { @SuppressWarnings("unchecked") public static void checkChar(char[] words,int size){ bo

C++ Primer(第四版) 课后习题4.18

问题: 编写程序,使用指针把一个 编写程序,使用指针把一个 int 型数组的所有元素设置为 0. 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 const size_t Size = 5; 8 int arr[Size] = {0,1,2,3,4}; 9 for (int *pbegin=arr, *pend =arr+Size ; pbegin != pend; pbegin++) 10 { 1

栈的应用--栈用作判断平衡符号,[()]对的,[(])错的

#include<stdio.h> #include<stdlib.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; struct Node{ char Ele; PtrToNode Next; }; Stack CreateStack( void ) { Stack S; S = malloc( sizeof( struct Node ) ); if(S == NULL ) print

Java50道经典习题-程序18 乒乓球赛

题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单. a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单.分析:如果是人经过逻辑推理可以很快的得到结论.但是计算机处理此问题,不可能立即得出结论,而必须对每一种组合一一验证,找出符合条件的组合. 假设甲队a,b,c的对手分别是i,j,k i,j,k互不相等并且分别都是乙队x,y,z中的一人 利用三重for循环保证i,j,k互不相等 再将题设条件“a说他不和x比,

C++ Primer第四版习题--5.18

#include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string*> spvec; string str; while(cin>>str) { string *sp = new string; *sp = str; spvec.push_back(sp); } vector<string*>::

C++ Primer第四版习题--3.18

#include <iostream> #include <vector> //#include <cctype> int main() { std::vector<int> ivec(10, 0); int num; for(std::vector<int>::iterator iter=ivec.begin(); iter!=ivec.end(); ++iter) { std::cin >> num; *iter=2*num; s

对于新人来说学习SEO不知怎么做起?

在网站上线之前,就要选择合适的服务器(又叫空间,主机或虚拟主机),基本的要求维度是稳定性,速度以及功能是否齐全. 服务器会影响网站在搜索引擎中的优化排名么?答案是肯定的.主机是否稳定,速度是否快,功能是否齐全等,都会影响网站关键词的排名.为什么会有如此影响呢?答案在于假设服务器有宕机情况,那么网站是无法打开的.如果用户无法正常打开网站,那么网站就不能满足其查询需求,搜索引擎蜘蛛无法爬取网站,就不能收录网页. 在网站上线之前,就要选择合适的服务器(又叫空间,主机或虚拟主机),基本的要求维度是稳定性

【Weiss】【第03章】练习3.18

[练习3.18]用下列语言编写检测平衡符号的程序 a.Pascal ( begin/end, ( ), [ ], { } ). b.C语言( /* */, ( ), [ ], { }). c.解释如何打印出错信息 Answer: a和b本质是一样的,就写了b小题即C语言的检测. 基本思想就是用栈,除了注释符号有一点点麻烦要查看连续两个字符,其它的几组都是很轻松愉快. 具体的细节都放到注释里了,所以在文章上没必要说太多. 这题测试代码就不放了,基本就是自己拿个文本文件改来改去,在mian函数里面就