如何将字符串压栈?
我现在碰到的问题是,每次从文件中读入一个字符串,如果是字符串"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是否配对 我用栈实现
看看这里: char txt[100] 你把txt定义成了数组,数组在程序处理过程中是一片固定的内存区域,因此你每次将数据读入数据后,就会覆盖原来的数据。 将定义为char[] txt,在使用时动态申请空间:txt = new char[100]; 然后在pop判断后将其释放:delete[] txt; 建议你认真去看看c/c++的基本类型的具体含义 另外,你也可以使用string类进行操作,我使用的数组(沿用你的思想),使用string类更方便处理
答:描述的太笼统,不能理解你处理方式, 如果可能,把代码贴出来看看详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>