Добавить a1/program.c
This commit is contained in:
		
							parent
							
								
									b9af0eb339
								
							
						
					
					
						commit
						5aab1928a4
					
				
							
								
								
									
										63
									
								
								a1/program.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								a1/program.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_LEN 100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    char bracket;
 | 
				
			||||||
 | 
					    int position;
 | 
				
			||||||
 | 
					} StackItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					    char line[MAX_LEN + 1];
 | 
				
			||||||
 | 
					    StackItem stack[MAX_LEN];
 | 
				
			||||||
 | 
					    int top = -1; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fgets(line, sizeof(line), stdin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf("Read: %s", line);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (int i = 0; line[i] != '\0'; i++) {
 | 
				
			||||||
 | 
					        char ch = line[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ch == '(' || ch == '{' || ch == '[' || ch == '<') {
 | 
				
			||||||
 | 
					            if (top < MAX_LEN - 1) {
 | 
				
			||||||
 | 
					                stack[++top].bracket = ch;
 | 
				
			||||||
 | 
					                stack[top].position = i;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') {
 | 
				
			||||||
 | 
					            if (top == -1) {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                return 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            char opening = stack[top].bracket;
 | 
				
			||||||
 | 
					            int opening_pos = stack[top].position;
 | 
				
			||||||
 | 
					            top--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ((opening == '(' && ch != ')') ||
 | 
				
			||||||
 | 
					                (opening == '{' && ch != '}') ||
 | 
				
			||||||
 | 
					                (opening == '[' && ch != ']') ||
 | 
				
			||||||
 | 
					                (opening == '<' && ch != '>')) {
 | 
				
			||||||
 | 
					                char expected;
 | 
				
			||||||
 | 
					                switch (opening) {
 | 
				
			||||||
 | 
					                    case '(': expected = ')'; break;
 | 
				
			||||||
 | 
					                    case '{': expected = '}'; break;
 | 
				
			||||||
 | 
					                    case '[': expected = ']'; break;
 | 
				
			||||||
 | 
					                    case '<': expected = '>'; break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                printf("Crossed bracket %c in %d, expected %c\n", ch, i, expected);
 | 
				
			||||||
 | 
					                return 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (top != -1) {
 | 
				
			||||||
 | 
					        printf("Unmatched opening bracket %c at position %d\n", stack[top].bracket, stack[top].position);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        printf("All brackets OK\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user