用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,

2013-10-10 作者: 神马举报

[c]代码库

//给定一个如下格式的字符串,(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。(15分)
//分析:此题实际上考的是站的应用,即曾经练过的括号匹配问题。

#include <stdio.h>
#include <STACK>
using namespace std;

/*判断表达式是否合法*/
bool IsValid(char *str) {
    if(NULL == str) return false;

    stack<char> op;

    while(*str) {
        if(*str == '(') {
            op.push(*str++);
        } else if(*str == ')') {
            if(op.empty())
                return false;
            else
                op.pop();
            str++;
        } else {
            str++;
        }
    }

    if(op.empty())
        return true;
    else
        return false;
}
/*消除中间的括号*/
char *Elimination_brackets(char *str) {
    if(str == NULL)  //字符串为空返回
        return str;

    char *temp = new char[strlen(str) + 1];
    char *result = temp;

    *temp++ = *str++; //跳过第一个左括号
    while(*str != '\0') {
        if(*str == ')' || *str == '(') { //有括号,跳过赋值
            str++;
            continue;
        }
        *temp++ = *str++;
    }
    *temp++ = ')';  //将有括号加上
    *temp = '\0';

    return result;

}
void main() {
    char str[] = "(1,(1,0),3)";
    int a = 0;
    if(IsValid(str)) {
        printf(Elimination_brackets(str));
    }

}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...