Добавить комментарий - CodeHelper

Добавить комментарий

Вот пример на C: Пример: Проверка правильности расстановки скобок v1 Файл Main.cpp

#include "stdafx.h"

namespace mystack {

int stack_head = 0;
const int stack_max_length = 128;
char stack_holder[stack_max_length];

void error(char *message) {
    printf("Error: %s", message);
    abort();
}

void push(char ch) {
    if (stack_head < stack_max_length)
    	stack_holder[stack_head++] = ch;
    else
    	error("Stack holder is full");
}


char pop() {
    if (stack_head > 0)
    	return stack_holder[--stack_head];
    else
    	error("Stack is empty");
    assert(false);
    return 0;
}

bool is_empty() {
    return stack_head == 0;
}

}   // namespace mystack

// --------------------------------------------------------------------------------------

namespace string_analizer {

    void error(const char *message) {
    	printf("Analizer error: %s", message);
    	abort();
    }

    bool is_open_bracket(char ch) {
    	return ch == '(' || ch == '{' || ch == '[';
    }

    char get_pair(char bracket) {
    	switch(bracket) {
    		case '(' : return ')';
    		case '{' : return '}';
    		case '[' : return ']';
    		default  : error("Unknown bracket");
    	}
    	assert(false);
    	return 0;
    }

    bool is_close_bracket(char ch) {
    	return ch == get_pair('(') || ch == get_pair('{') || ch == get_pair('[');
    }

    void analize(const char *str) {
    	for(int i=0; str[i]!=0; i++) {
    		if (is_open_bracket(str[i]))
    			mystack::push(str[i]);
    		if (is_close_bracket(str[i])) {
    			if (mystack::is_empty()) 
    				error("Invalid balance (close bracket without open bracket)");
    			char ch = mystack::pop();
    			if (get_pair(ch) != str[i]) error("Invalid pair");
    		}
    	}
    	if (!mystack::is_empty()) 
    		error("Invalid balance (open bracket without close bracket)");
    }

}   // namespace string_analizer

// --------------------------------------------------------------------------------------

namespace sa = string_analizer;

int main(int argc, char* argv[])
{
    char buf[128];
    printf("Enter expression to analize: ");
    scanf("%s", buf);
    sa::analize(buf);
    return 0;
}
Внимание! Вы собираетесь отправить информацию от имени анонимного пользователя.
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.