Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- bool checkbrackets(char* astr, char first, char second){
- int cntopened = 0;
- for (int i = 0; astr[i] != '\0'; ++i){
- if (astr[i] == first) cntopened++;
- else if (astr[i] == second) cntopened--;
- if (cntopened < 0) break;
- }
- return (cntopened == 0);
- }
- int checkcomments(char* astr){
- /* 0 - no comments or closed comment
- * 1 - only opened comment
- * 2 - only closed comment*/
- int res = 0;
- for (int i = 0; astr[i] != '\0'; ++i){
- if ((astr[i] == '/') && (astr[i+1] == '*')){
- res = 1;
- astr[i] = '(';
- astr[i+1] = '(';
- }
- if ((astr[i] == '*') && (astr[i+1] == '/')){
- if (res == 1) res = 0; else res = 2;
- astr[i] = ')';
- astr[i+1] = ')';
- }
- }
- return res;
- };
- bool checkescapesequence(char* astr){
- bool res = true;
- for (int i = 0; astr[i] != '\0'; ++i){
- if (astr[i] == '\\') {
- switch (astr[i + 1]) {
- case 'a': break;
- case 'b': break;
- case 'f': break;
- case 'n': break;
- case 'r': break;
- case 't': break;
- case 'v': break;
- case '\'': break;
- case '"': break;
- case '?': break;
- default:
- return false;
- }
- }
- }
- return res;
- }
- int main(){
- char* s = malloc(80*sizeof(char));
- FILE *f = fopen("input.txt","r");
- int commentscnt = 0;
- for (int i = 1; !feof(f); i++) {
- fscanf(f, "%s", s);
- bool res;
- res = checkbrackets(s,'(',')');
- printf(res ? "" : "Error: line %d brackets type () disbalance \n",i);
- res = checkbrackets(s,'{','}');
- printf(res ? "" : "Error: line %d brackets type {} disbalance \n",i);
- res = checkbrackets(s,'[',']');
- printf(res ? "" : "Error: line %d brackets type [] disbalance \n",i);
- res = checkbrackets(s,'"','"');
- printf(res ? "" : "Error: line %d brackets type \"\" disbalance \n",i);
- res = checkbrackets(s,'\'','\'');
- printf(res ? "" : "Error: line %d brackets type \'\' disbalance \n",i);
- res = checkescapesequence(s);
- printf(res ? "" : "Error: line %d incorrect escape sequence \n",i);
- switch (checkcomments(s)){
- case 1: commentscnt += 1; break;
- case 2: commentscnt -= 1; break;
- default: break;
- }
- }
- printf(commentscnt ? "Error: comments disbalance \n" : "");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement