Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#include <stdio.h>
int main (void)
{
int ch, a=0;
printf ("Введите слово из скобок: ");
do {
ch = getchar();
if( ch == '(' ) a++;
else if( ch == ')' ) if(--a < 0) break;
} while(ch != '\n');
if( a == 0) printf ("Правильно\n");
else printf ("Не правильно\n");
return 0;
}
<?
$bracket=array(
array('[',']'),
array('(',')'),
array('{','}')
);
function check($BracesStr)
{
global $bracket;
$stack=array();
for($i=0;$i<strlen($BracesStr);$i++)
{
$ch=$BracesStr[$i];
for($j=0;$j<count($bracket);$j++)
{
if($ch==reset($bracket[$j]))
{ // новая скобка, в стек её
array_push($stack,$ch);
break;
}
elseif($ch==end($bracket[$j]))
{ // закрытие скобки, проверка
if(reset($bracket[$j])==end($stack))
{ // скобки совпадают
array_pop($stack);
break;
}
else
{ // нарушение структуры
return false;
}
}
}
}
return true;
}
echo var_dump(check("[[[]]][][[]][()]{}[]")); // bool(true)
echo var_dump(check("[[[)]]][][[]][()]{}[]")); // bool(false)
?>
* This source code was highlighted with Source Code Highlighter.module Main where
import System
import Text.ParserCombinators.Parsec
close "[" = "]"
close "(" = ")"
close "{" = "}"
squareBracket = string "["
roundBracket = string "("
brace = string "{"
openParens = squareBracket <|> roundBracket <|> brace
closeParens p = string (close p)
emptySequence = return $ ()
nonEmptySequence = do
p <- openParens
parentheses
closeParens p
parentheses
parentheses = nonEmptySequence <|> emptySequence
main = do
args <- getArgs
putStrLn (check (args !! 0)) where
check input = case parse parentheses "stdin" input of
Left err -> "False: " ++ show err
Right val -> "True"% ./t "[[[]]][][[]][()]{}[]"
True
% ./t "[[[]]][][[]][()]{}["
False: «stdin» (line 1, column 20):
unexpected end of input
expecting "[", "(", "{" or "]"
test = (function(){
var pop = {')':'(','>':'<','}':'{',']':'[',')':'('};
var stack = [];
return function(string){
for(var i=0;i<string.length;i++){
var char = string.charAt(i);
if(!pop[char]){
stack.push(char);
}else{
if(stack.length==0 || stack.pop()!=pop[char])return false;
}
}
return stack.length==0?true:false;
}
})();
test('(())<>{}[]');
let paren = parser
| [< ''(' >] -> ')'
| [< ''[' >] -> ']'
let rec parens = parser
| [< c1 = paren; inner = parens; c2 = Stream.next >] -> inner && c1 = c2
| [< >] -> true;;
let parse = parser [< valid = parens; _ = Stream.empty >] -> valid
let check s =
try parse (Stream.of_string s)
with Stream.Error _ | Match_failure _ -> false
var check = (function(close) {
var open = { };
for (i in close)
open[close[i]] = i;
return function(str) {
var first=0, begin = 0, end = 1, len = str.length;
while (first < len) {
if (close[str[end]] == str[begin]) {
if (begin == first)
begin = first = ++end;
else
begin--;
}
else if (open[str[end]])
begin++;
else
return false;
end++;
}
return true;
};
})({ ')':'(', '>':'<', '}':'{', ']':'[' });
alert(check("[[[]]][][[]][()]{}[]")); // true
alert(check("[[[)]]][][[]][()]{}[]")); // false
* This source code was highlighted with Source Code Highlighter.Без стэка =)
- var check = (function(close) {
- var bracket = { }, ch, end;
- for (i in close)
- bracket[close[i]] = (function(i) {
- return function(pos) {
- if (ch[pos+1] == i)
- return pos+2;
- else if (bracket[ch[end = pos+1]])
- while (end = bracket[ch[end]](end))
- if (ch[end] == i)
- return end + 1;
- throw { };
- }
- })(i);
-
- return function(str) {
- try {
- var pos = 0;
- while (pos < str.length)
- pos = bracket[(ch = str)[pos]](pos);
- return true;
- }
- catch (e) {
- return false;
- }
- };
- })({ ')':'(', '>':'<', '}':'{', ']':'[' });
-
- alert(check("[<>{}]")); // true
- alert(check("")); // true
- alert(check("[[[]]][][[]][()]{}[]")); // true
- alert(check("[[[)]]][][[]][()]{}[]")); // false
- alert(check("]")); // false
* This source code was highlighted with Source Code Highlighter.import Data.List
bracket '[' = Just ']'
bracket '(' = Just ')'
bracket '{' = Just '}'
bracket _ = Nothing
brackets [] = True
brackets [x] = False
brackets (l:r:s)
| Just r' <- bracket l
, True <- r' == r
= brackets s
| Just r' <- bracket l
, sub <- last $ filter brackets $ inits (r:s)
, (r'':tl) <- drop (length sub) (r:s)
, True <- r'' == r'
= brackets tl
| otherwise = False
-module(brackets).
-export([check/1]).
close($() -> $);
close($[) -> $];
close(${) -> $};
close(_) -> not_opening.
check(List) ->
check(List, []).
check([], []) -> ok;
check([], _) -> error;
check([H1|T1], []) -> check(T1, [H1]);
check([H1|T1], [H2|T2]=L) ->
case close(H2) of
H1 -> check(T1, T2);
_ -> check(T1, [H1|L])
end.
> brackets:check("[[[]]][][[]][()]{}[]").
ok
> brackets:check("[[[)]]][][[]][()]{}[]").
error
close_("(", ")").
close_("[", "]").
close_("{", "}").
check(List) :-
check(List, []), !.
check([H1|T1], []) :-
check(T1, [H1]).
check([H1|T1], [H2|T2]) :-
( close_([H2], [H1])
-> check(T1, T2)
; check(T1, [H1, H2|T2])
).
check([], []).
?- check("[[[]]][][[]][()]{}[]").
true.
?- check("[[[)]]][][[]][()]{}[]").
false.
BRACES = { '[':']', '{':'}', '(':')' }
def check( s, x='' ):
if len(s)==0: return len(x)==0
if s[0] in BRACES: return check( s[1:], BRACES[s[0]]+x )
if len(x)==0: return False
if s[0]==x[0]: return check( s[1:], x[1:] )
return False
assert check( "[[[]]][][[]][()]{}[]" ) == True
assert check( "[[[)]]][][[]][()]{}[]" ) == False
def check(t):
ol = 0
nl = len(t)
while ol!=nl:
ol = nl
t = t.replace("()","").replace("[]","").replace("{}","")
nl = len(t)
return nl==0
#!/usr/bin/perl -w
use 5.010;
use strict;
my %bracers = (']'=>'[',')'=>'(','}'=>'{');
sub TRUE { 'true' };
sub FALSE { 'false' };
sub check {
my @buf;
for (split '',shift || $_) {
if (defined $bracers{$_}) {
return FALSE if pop @buf ne $bracers{$_};
} else {
push @buf,$_;
}
};
return $_ ? TRUE : FALSE;
}
foreach ( "[[[]]][][[]][()]{}[]" , "[[[)]]][][[]][()]{}[]" , "{}{}", '') {
say "$_ - ",check();
}
def invert c
return ')' if c == '('
(c[0] + 2).chr
end
def check str
stack = []
str.split(//).each do |c|
if c =~ /[\{\[\(]/
stack.push c
elsif c =~ /[\}\]\)]/
return false if c != invert(stack.pop)
else
return false
end
end
true
end
puts check('[[[]]][][[]][()]{}[]') #=> true
puts check('[[[)]]][][[]][()]{}[]') #=> false
def check str
stack = []
str.split(//).each do |c|
if '{[('.include? c
stack.push c
else
return false if c != stack.pop.tr('{[(','}])')
end
end
true
end
puts check('[[[]]][][[]][()]{}[]') #=> true
puts check('[[[)]]][][[]][()]{}[]') #=> false
bool validate(char *text, void *stack)
{
unsigned char *stack_ptr = (unsigned char *) stack;
while (unsigned char ch = (unsigned char) *text++)
if (!(ch & 1 ^ (ch & 2) >> 1)) *stack_ptr++ = ch;
else if (stack == stack_ptr || *--stack_ptr - ch > 2) return false;
return stack == stack_ptr;
}
void main()
{
void *stack = malloc(4 * 1024);
printf(validate("[[[]]][][[]][()]{}[]", stack) ? "valid\n" : "invalid\n");
printf(validate("[[[)]]][][[]][()]{}[]", stack) ? "valid\n" : "invalid\n");
free(stack);
}
Правильность скобочной структуры, prolog