第十三题 括号匹配问题,使用栈和不使用栈
来源:互联网 发布:php sql注入 编辑:程序博客网 时间:2024/06/04 18:08
//全局的字符串不初始化默认为每一个元素都是'\0'其实就是0,(这个0当成int输出就输出一个0,但是当成char输出就输出不出来)//scanf遇到空格算截止,遇到回车也算,但是gets函数遇到空格不算截止,所以要输入的字符串里面有空格可以使用gets函数#include <stdio.h>#include <algorithm>#include <stack>#include <string.h>#include <string>#include <iostream>using namespace std;char str[101];int tmp[101];char ans[101];int cnt;int main(){ while(scanf("%s",&str)!=EOF) { memset(ans,0,sizeof(ans));//这里注意不能写memset(ans,' ',sizeof(ans));空格和\0的意义是不同的,' '的ascii码为32而\0就是0,初始化为' '之后会输出一大串空格,很可能导致PE! cnt=0; for(int i=0;i<strlen(str);i++) { if(str[i]=='(') { tmp[cnt]=i; cnt++; ans[i]=' '; } else if(str[i]==')') { if(cnt) { cnt--; ans[i]=' '; } else { ans[i]='?'; } } else { ans[i]=' ';//这里要注意要设成空格 } } while(cnt--) { ans[tmp[cnt]]='$'; } printf("%s\n",str); printf("%s\n",ans); //memset(str,0,sizeof(str));//这里必须memset,scanf()一个字符串的时候,发现最好清空之后再scanf,因为scanf不会先将字符串清零之后再输入,而是直接输入多少覆盖多少,然后在最后加了一个\0。 //注意因为只加了一个\0,所以之后的原来的输入没有被\0覆盖 //比如先向str中scanf一个5长度的字符xxxxx\0,再scanf一个2长度的,则变成yy\0xx\0。(后面的全部都是\0,因为是全局的数组) //终于知道了,不是这里的问题,是上面for里面用了sizeof,所以把str所有的字符都遍历了(遇到\0也不停止) //所以这里其实不需要memset,只要上面把sizeof变成strlen就好了 }////我的实验1:scanf实验,输5个字符的字符串,再输入2个字符的字符串// scanf("%s",&str);//s// putchar(str[4]);//// scanf("%s",&str);//2// putchar(str[4]);//第五个字符还在//// scanf("%s",&str);//5// putchar(str[2]);//// scanf("%s",&str);//2// putchar(str[2]);//第3个字符被\0覆盖,所以不在了//我的实验2:sizeof和strlen实验,输5个字符的字符串,再输入2个字符的字符串// scanf("%s",&str);//s// printf("%d\n",sizeof(str));//// scanf("%s",&str);//2// printf("%d\n",sizeof(str));//// scanf("%s",&str);//5// printf("%d\n",strlen(str));//// scanf("%s",&str);//2// printf("%d\n",strlen(str));//实验中惊人的发现,c字符串应该用strlen,不应该用sizeof!!!只要我的字符串定义的是101,无论怎么输入,sizeof得到的都是101,但是strlen得到的正确的,因为它是找到第一个\0结束的。//因为!sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响//又例如://char str[20]="0123456789";//int a=strlen(str); //a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。//int b=sizeof(str); //b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响//sizeof就是c语言中的东西!但是string的长度一定用strlen!! return 0;}
//STL的栈,pop()函数没有返回值的#include <stdio.h>#include <algorithm>#include <stack>#include <string.h>#include <iostream>using namespace std;stack<int> s;char str[101];char ans[101];int main(){ while(scanf("%s",&str)!=EOF) { memset(ans,0,sizeof(ans));//这个是必须的 for(int i=0;i<strlen(str);i++) { if(str[i]=='(') { ans[i]=' '; s.push(i); } else if(str[i]==')') { if(s.empty()) { ans[i]='?'; } else { ans[i]=' '; s.pop(); } } else ans[i]=' ';//这一步经常忘记,所以说做题目不能挤着眼做啊,要注意每一步的细节 } while(!s.empty()) { //tmp=s.pop();//STL库 中的pop函数好像是没有返回值的,不能这样用! ans[s.top()]='$'; s.pop(); } printf("%s\n",str); printf("%s\n",ans); }// //STL的容器栈测试// s.push(10);// s.push(20);// s.push(30);// cout<<s.top()<<endl;// cout<<s.size()<<endl;// cout<<s.empty()<<endl; return 0;}
阅读全文
0 0
- 第十三题 括号匹配问题,使用栈和不使用栈
- NYOJ---括号匹配问题---栈的使用
- 使用栈判断括号匹配
- 使用栈实现括号匹配
- 关于使用栈解决括号匹配的问题
- [ACM] 括号匹配问题(栈的使用)
- [栈] 括号匹配问题
- 栈(括号匹配问题)
- 括号匹配问题(栈)
- 数据结构-使用栈进行括号匹配算法
- Matlab 使用栈判断括号是否匹配
- 使用栈实现括号匹配算法-java
- 使用栈来实现括号匹配
- 栈之括号匹配问题
- 括号匹配问题--栈实现
- 栈应用:括号匹配问题
- LeetCode20——Valid Parentheses(括号匹配问题,使用栈的知识)
- 栈和队列---括号匹配
- TCP代理 python实现
- 四大CPU体系结构ARM、X86/Atom、MIPS、PowerPC
- 设计模式之禅20
- 免密登录 蹩脚的“脚本”
- 人事管理系统之系统模块管理(一)
- 第十三题 括号匹配问题,使用栈和不使用栈
- 类calss Car
- 日常运维 -1
- cocos2dx ScrollView,TableView,ListView区别
- Java-6大原则
- linux内核设计与实现[第4章 摘抄]
- 封装Debug.Log 游戏发布关闭 Log 减少性能消耗
- Eclipse项目上传码云
- spark.end()