| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1827 人关注过本帖
标题:请问C语言写栈的问题怎么解决呀
取消只看楼主 加入收藏
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
结帖率:96.88%
收藏
已结贴  问题点数:20 回复次数:4 
请问C语言写栈的问题怎么解决呀
(程序代码中的括号匹配)请编写程序对一段程序代码中的括号匹配情况进行判断。括号类型有(),[],{}三类,程序代码中可能包含注释,如多行注释/**/和单行注释//,且注释内容不参与括号匹配情况的分析。
【输入】 若干行程序代码,代码长度小于1500个字符
【输出】 除去注释后的括号数量 括号是否匹配(yes/no)
例如:
【输入】
int Collatz(unsigned int n) {
    if(n==1) return 0;
    else if(n%2) return Collatz(n*3+1)+1;
    else return Collatz(n/2)+1;
}
【输出】12 yes

【输入】
float CalcPay( /* [in] */  float  payRate,     // Employee's pay rate
              /* [in] */  float  hours      // Hours worked
               ){     //return Wages earned()
【输出】 3 no

【输入】"//" ()
【输出】2 yes
搜索更多相关主题的帖子: 括号 代码 输入 输出 注释 
2020-03-17 17:38
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
//orz虽然很想自己解决但是我还不熟悉栈的规则,老师只讲了C艹的自定义栈,但是我也就能看懂一大半更别说自己写了
//好像思路就是见到左括号压栈,见到右括号出栈,并将弹出的左括号和右括号配对。

我想要两颗西柚。
2020-03-17 17:40
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
回复 3楼 return_0
我看了一下老师的ppt有个相关的题,请问访问栈顶是什么意思...访问完以后又push是什么操作啊...

我想要两颗西柚。
2020-03-17 21:38
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
程序代码:
#include <iostream>
#include<stdio.h>
using namespace std;
typedef char AAA;
const int maxstack=10;
enum Error_code{underflow,overflow,success};
class Stack
{
    public:
   Stack(){count=0;};
   bool empty() const;
   Error_code push(const char &item);
   Error_code pop();
   Error_code top(char &item) const;

    private:
        int count;
        AAA entry[maxstack];

};
Error_code Stack::push(const AAA &item)
{
    Error_code outcome=success;
    if(count>=maxstack)
        outcome=overflow;
    else
        entry[count++]=item;
    return outcome;
}
Error_code Stack::pop()
{
    Error_code outcome=success;
    if(count==0)
        outcome=underflow;
    else --count;
    return outcome;
}
bool Stack::empty() const
                     {
   bool outcome = true;
   if (count > 0) outcome = false;
   return outcome;
}

Error_code Stack::top(AAA &item) const
{
    Error_code outcome=success;
    if(count==0)
        outcome=underflow;
    else
        item=entry[count-1];
    return outcome;
}
int main()
{   Stack openings;
    char symbol;
    int n=0;
    int error=0;
    while((symbol=cin.get())!=EOF)
    {    if(symbol=='/')
        {  symbol=cin.get();
            if(symbol=='/')
            {
                 do(symbol=cin.get());
                    while(symbol=='\n');
            }
            else if(symbol=='*')
            {   symbol=cin.get();
                int k=0;
                while(!k)
                { while(symbol!='*')
                    symbol=cin.get();
                    if(symbol=='/')
                    k=1;
                }
            }
        }
       else if(symbol=='{'||symbol=='('||symbol=='[')
        {
            n++;
            openings.push(symbol);
        }
        else if(symbol=='}'||symbol==')'||symbol==']')
        {
            n++;
            if(openings.empty())
            error++;
             else
            {
                char match;
                openings.top(match);
                openings.pop();
                if((symbol == '}' && match != '{')|| (symbol == ')' && match != '(')|| (symbol == ']' && match != '['))
                error++;

            }
        }
       


    }
    if(!openings.empty())
        error++;
    cout<<n;
    if(error==0) cout << " yes" << endl;
    else cout << " no" << endl;

    return 0;
}
抄抄改改变成这样了 5个点过了3个orzC语言的栈怎么写啊到底

我想要两颗西柚。
2020-03-17 23:57
komorebi0110
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:145
专家分:17
注 册:2019-11-23
收藏
得分:0 
回复 8楼 纯蓝之刃
代码思路太清楚了!放在平台上第一个点过不了,问同学是因为没考虑“”里的括号可能
改了以后就全部AC了,非常感谢!!

我想要两颗西柚。
2020-03-18 14:24
快速回复:请问C语言写栈的问题怎么解决呀
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.171591 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved