作业帮 > 综合 > 作业

用C语言编写程序,判断一个字符序列中(与)、[与]、{与}是否配对且互不相交

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/09 16:13:25
用C语言编写程序,判断一个字符序列中(与)、[与]、{与}是否配对且互不相交
给思路就行,不用代码
用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}
}