栈的应用-去掉括号和括号里内容

一天看到了这么一个文件:
/*     file1.txt      */

[00:06.32]曾 曾经在我眼前 却又消失不见
[00:14.68]这是今天的第六遍
[00:20.99]电影里的配乐 好像你的双眼
[00:27.55]我爱你 快回到 我身边
[00:41.76].....


于是花了一个晚上,从构思到实现,把去括号的方法解决了,以下就是结合栈实现的去括号内容(包括括号本身)的程序

//============================================================================
// Name        : TEST.cpp
// Author      :  陆键霏     
// College     : 深圳职业技术学院
// Copyright   : Your copyright notice
// Description : KillBrackets
//============================================================================

#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

typedef char datatype;/*elemptype为元素类型*/

typedef struct node
{

datatype data;
struct node* next;

}Node;       /*该链表结构*/

class STACK
{
private:

Node *top;

public:
   STACK();
   void setnull();
   int empty();  //判断该栈是否为空
  void push(datatype x); //入栈
   bool pop(datatype *x1); //出栈
   datatype gettop(); //获得栈顶元素
   void print();  //输出栈元素
};

STACK::STACK()
{
top=NULL;
}

void STACK::setnull()
{
 Node *p;

 do
    {
     p=top;
     top=top->next;
     delete p;
    }while(top!=NULL);
}

int STACK::empty() //小于零说明该栈为空
{
    if(top==NULL)
       return true;
    else
        return false;
}

void STACK::push(datatype x) //入栈
{
    Node *p;
    p=new Node;
    p->data=x;
    p->next=top;
    top=p;
}

bool STACK::pop(datatype *x) //出栈
{
    Node *p;
    if(top==NULL)
    {
    cout<<"栈空";
    return false;
    }
    else
    {
    p=top;
    *x=p->data;
    top=top->next;

    delete p;
    return true;
    }

}

datatype STACK::gettop()
{
 return top->data;

}


class killSquareBrackets
{
private:
    STACK s;
    string str;

public:

    killSquareBrackets();

    killSquareBrackets(string str);

    void setString(string str);

    void printResult();

    string getObjectString();



};

killSquareBrackets::killSquareBrackets(){}

killSquareBrackets::killSquareBrackets(string str)
{
    this->str=str+'#';
}

void killSquareBrackets::setString(string str)
{
   this->str=str+'#';
}

void killSquareBrackets::printResult()
{
    char char1,char2;
    int i=0;
    char2=this->str[i];

    while(char2!='#')
    {


            if(char2!='[' &&
               char2!=']' )
            {
                s.push(char2);
                char2=this->str[++i];
            }
            else
            if(char2=='[')
            {
                   s.push(char2);
                   char2=this->str[++i];
            }
            else
            if(char2==']')
            {
                s.pop(&char1);
                while(char1!='[')
                {
                    s.pop(&char1);

                }
                char2=this->str[++i];

            }
    }


    STACK temp;

    //反向处理
    while(!s.empty())
    {
    s.pop(&char1);
    temp.push(char1);
    }

    while(!temp.empty())
    {
        temp.pop(&char1);
        cout<<char1;

    }


}
string killSquareBrackets::getObjectString(){

    char char1,char2;
        int i=0;
        char2=this->str[i];

        while(char2!='#')
        {


                if(char2!='[' &&
                   char2!=']' )
                {
                    s.push(char2);
                    char2=this->str[++i];
                }
                else
                if(char2=='[')
                {
                       s.push(char2);
                       char2=this->str[++i];
                }
                else
                if(char2==']')
                {
                    s.pop(&char1);
                    while(char1!='[')
                    {
                        s.pop(&char1);

                    }
                    char2=this->str[++i];

                }
        }


        STACK temp;

        //反向处理
        while(!s.empty())
        {
        s.pop(&char1);
        temp.push(char1);
        }
        char tempStr[str.length()];
        i=0;
        while(!temp.empty())
        {
            temp.pop(&char1);
            tempStr[i]=char1;
            i++;
        }
        int j=0;
        for(j=i;j<str.length()-1;j++)
        {
            tempStr[j]=0x20;

        }

        tempStr[j]='/0'; //关键 每一句后加上结束符

//        char returnStr[i+1];
//        for(int j=0;j<=i;i++)
//        {
//            returnStr[j]=tempStr[j];
//        }
    return tempStr;
}

int main(int argc,char *args[]) {

    ifstream infile(args[1]);
    ofstream outfile(args[2],ios::trunc);

    if(argc!=3)
    {
      cerr<<"/nkillBrackets [drive:][path]<source filename>"<<endl;
      cerr<<"             [drive:][path]<destination filename> /n";

    }



    if(!infile)
    {

       return 0;
    }

    if(!outfile)
    {

               return 0;

    }


  //Reads the original file
    killSquareBrackets mystr;
     char str[100];
   while(!infile.eof())
   {
       infile.getline(str,sizeof(str));
       mystr.setString(str);
       outfile<<mystr.getObjectString();
       outfile<<endl;

   }
   //outfile<<'/0';
   //Writes the object file


   infile.close();
   outfile.close();

    return 0;
}




//


将以上程序编译链接成exe文件,在dos下调用,
比如:
  将文件命名为    KillBrackets.exe
dos下调用
C:/Documents and Settings/John>KillBrackets file1  file2
注释:file1和file2分别代表输出的源文件和目标文件。
源文件:
[00:06.32]曾 曾经在我眼前 却又消失不见
[00:14.68]这是今天的第六遍
[00:20.99]电影里的配乐 好像你的双眼
[00:27.55]我爱你 快回到 我身边
[00:41.76].....

目标文件:
曾 曾经在我眼前 却又消失不见         
这是今天的第六遍         
电影里的配乐 好像你的双眼         
我爱你 快回到 我身边         
         
好不好 好不好 好不好




相信一定很实用!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值