爱问知识人 爱问教育 医院库

如何将字符串压栈?

首页

如何将字符串压栈?

我现在碰到的问题是,每次从文件中读入一个字符串,如果是字符串"if"或"end"就把它压栈。那么每次压入的都是指针,这个指针的内容一直在变,因为指针一直在读文件中的字符串。怎么才能解决这个问题呢?用 
while(infile>>txt) 这个循环好像不行啊 txt的内容一直在变 压到栈中的内容也一直在变 而且栈的大小始终是1 ! 
stack<string> T;
    char txt[100];
    ifstream infile;
infile.open(s);
    if(! infile)
    {
        cout<<"打开失败."<<endl;
        return;
    }

    while(infile>>txt && strcmp(txt,"begin")!=0)
    {
        if( strcmp(txt,"end")==0 ||
            strcmp(txt,"if")==0 ||
            strcmp(txt,"then")==0 ||
            strcmp(txt,"else")==0 )
            {cout<<"函数没有以begin开始."<<endl;
               ose();
              return;}

    }
     T.push(txt);
   
 while(infile>>txt)
    {

        if(  strcmp(txt,"begin")==0  )//begin
        {

            if( strcmp( p(),"if")==0 || strcmp( p(),"end")==0 ||
                strcmp( p(),"else")==0 )
                {cout<<"if语句错误,或begin语句错误(begin)"<<endl;
               
                 return;
                }

            T.push(*txt);//将begin压栈

 }


        if( strcmp(txt,"end")==0  )//end
        {

             if( strcmp( p(),"begin")==0 )
             {
                 //cout<<"begin语句配对失败"<<endl;
                 //return;
                 T.pop();//begin 出栈
             }

             else if(strcmp( p(),"then")==0)
                    {
                        while( strcmp( p(),"begin")!=0 ) T.pop();
                        T.pop();//begin pop
                    }
                    else {
                    cout<<"begin语句配对失败(end)"<<endl;
                    
                    return;}





        }



        if(strcmp(txt,"if")==0)//if
        {

             if( strcmp( p(),"if")==0 || strcmp( p(),"end")==0
                || strcmp( p(),"else")==0)
                {
                    cout<<"语句配对失败。(if)"<<endl;
                   
                    return;
                }


             T.push(txt);
 }


        if(strcmp(txt,"then")==0)//then
        {

            if(strcmp( p(),"if")!=0)
            {
                cout<<"if语句配对错误。(then)"<<endl;
               
                return;
            }

            T.push(txt);


        }
if(strcmp(txt,"else")==0)//else
        {

            if(strcmp( p(),"then")!=0)
            {
                cout<<"if语句配对失败(else)"<<endl;
                cout
大致的代码就是这样 就是为了检查pascal源文件中begin end是否配对 if then else是否配对 我用栈实现

提交回答
好评回答
  • 2012-09-27 07:18:19
    看看这里:
    char txt[100]
    你把txt定义成了数组,数组在程序处理过程中是一片固定的内存区域,因此你每次将数据读入数据后,就会覆盖原来的数据。
    将定义为char[] txt,在使用时动态申请空间:txt = new char[100];
    然后在pop判断后将其释放:delete[] txt;
    建议你认真去看看c/c++的基本类型的具体含义
    另外,你也可以使用string类进行操作,我使用的数组(沿用你的思想),使用string类更方便处理

    好***

    2012-09-27 07:18:19

  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 177-196
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):