用C语言编写程序,判断一个字符序列中(与)、[与]、{与}是否配对且互不相交
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/09 16:13:25
用C语言编写程序,判断一个字符序列中(与)、[与]、{与}是否配对且互不相交
给思路就行,不用代码
给思路就行,不用代码
给你个思路,做一个元素为char的stack,从字符序列的开头开始循环读,是([{就存进stack,是)]}就判断stack顶部元素是不是对应的左半边括号,不是或者已经空了的话就不配对或相交了,中断循环.一直到最后如果stack正好空了,那么结果才是配对且互不相交
再问: 这样的话,如果出现小括号里面套着大括号,就是({})的情况,好像发现不了吧。
再答: 少说了一句,判断出一对括号就从stack里删掉顶部元素
java代码已经实现(因为有现成的Stack类,c还要自己做太麻烦。。。),可以参考下import java.util.Stack;
public class Main {
\x09
\x09static boolean isMatch(String str) {
\x09\x09Stack<Character> stack = new Stack<Character>();
\x09\x09Character ch;
\x09\x09for(int i = 0; i < str.length(); i++) {
\x09\x09\x09ch = Character.valueOf(str.charAt(i));
\x09\x09\x09if(ch.equals('(') || ch.equals('[') || ch.equals('{'))
\x09\x09\x09\x09stack.push(ch);
\x09\x09\x09else if(ch.equals(')')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('('))
\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09\x09else if(ch.equals(']')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('['))
\x09\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09\x09else if(ch.equals('}')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('{'))
\x09\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09}
\x09\x09if(stack.isEmpty())
\x09\x09\x09return true;
\x09\x09else
\x09\x09\x09return false;
\x09}
\x09
\x09public static void main(String[] args) {
\x09\x09String str = "public static void main(String[] args) {\n"
\x09\x09\x09\x09+ "}{}";
\x09\x09System.out.print(isMatch(str));
\x09}
}
再问: 这样的话,如果出现小括号里面套着大括号,就是({})的情况,好像发现不了吧。
再答: 少说了一句,判断出一对括号就从stack里删掉顶部元素
java代码已经实现(因为有现成的Stack类,c还要自己做太麻烦。。。),可以参考下import java.util.Stack;
public class Main {
\x09
\x09static boolean isMatch(String str) {
\x09\x09Stack<Character> stack = new Stack<Character>();
\x09\x09Character ch;
\x09\x09for(int i = 0; i < str.length(); i++) {
\x09\x09\x09ch = Character.valueOf(str.charAt(i));
\x09\x09\x09if(ch.equals('(') || ch.equals('[') || ch.equals('{'))
\x09\x09\x09\x09stack.push(ch);
\x09\x09\x09else if(ch.equals(')')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('('))
\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09\x09else if(ch.equals(']')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('['))
\x09\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09\x09else if(ch.equals('}')) {
\x09\x09\x09\x09if(stack.isEmpty())
\x09\x09\x09\x09\x09return false;
\x09\x09\x09\x09else if(stack.peek().equals('{'))
\x09\x09\x09\x09\x09\x09stack.pop();
\x09\x09\x09\x09else
\x09\x09\x09\x09\x09return false;
\x09\x09\x09}
\x09\x09}
\x09\x09if(stack.isEmpty())
\x09\x09\x09return true;
\x09\x09else
\x09\x09\x09return false;
\x09}
\x09
\x09public static void main(String[] args) {
\x09\x09String str = "public static void main(String[] args) {\n"
\x09\x09\x09\x09+ "}{}";
\x09\x09System.out.print(isMatch(str));
\x09}
}
用C语言编写程序,判断一个字符序列中(与)、[与]、{与}是否配对且互不相交
C语言中文汉字与字符判断
C语言中怎么编写程序判断两个平行于坐标轴的矩形是否相交,麻烦大神们了.
急用:编写C程序,读取一个文本文件,统计其中的英文字母与数字字符的个数,全部字符个数与单词个数.
C语言,编写一个函数squeeze(s1,s2),能从字符串s1中删去所有与字符串s2中相同的字符.
C语言编程:与指定数字相同的数的个数 输出一个整数序列中与指定数字相同的数的个数.求可行的程序!
用C语言编写个程序,输入一个2-7为的整数,然后判断是否是一个runaround数
编写一个C语言程序判断一个数是否是素数
判断题:在转录过程中,碱基互补配对原则是:A与T配对,G与C配对.
用C语言编程序 写一个函数,判断输入年份是否为闰年,并编写主函数测试
使用c语言编写一个程序,判断从键盘输入的整数是否为“完全数”?
C语言程序输入一个字符序列,依次输出其中所有数字!