Проанализировать правильность расставленных скобок - C (СИ)
Формулировка задачи:
не компилирует
#include <stdio.h> #include <string.h> int main() { char instr[80], outstr[80]; int i, j, posLastOpenBracket = -1, posFirstCloseBracket = -1, sizeinstr; puts("Input string:"); gets(instr); for(i = 0; i < strlen(instr); i++) if(instr[i] == '{') posLastOpenBracket = i; if(posLastOpenBracket == -1) { puts("Error."); return; } for(i = posLastOpenBracket + 1; i < strlen(instr); i++) if(instr[i] =='}') { posFirstCloseBracket = i; break; } if(posFirstCloseBracket < posLastOpenBracket) { puts("Error"); return; } for(i = posLastOpenBracket + 1, j=0; i < posFirstCloseBracket; i++, j++) outstr[j]=instr[i]; outstr[j] = '\0'; for(i = posFirstCloseBracket; i <= strlen(instr); i++) { instr[i - (posFirstCloseBracket - posLastOpenBracket) + 1] = instr[i]; } puts(instr); puts(outstr); }
Решение задачи: «Проанализировать правильность расставленных скобок»
textual
Листинг программы
#include <stdio.h> #include <string.h> int main() { char instr[80], outstr[80]; int i, j, posLastOpenBracket = -1, posFirstCloseBracket = -1, sizeinstr; puts("Input string:"); gets(instr); for(i = 0; i < strlen(instr); i++) if(instr[i] == '{') posLastOpenBracket = i; if(posLastOpenBracket == -1) { puts("Error."); return; } for(i = posLastOpenBracket + 1; i < strlen(instr); i++) if(instr[i] =='}') { posFirstCloseBracket = i; break; } if(posFirstCloseBracket < posLastOpenBracket) { puts("Error"); return; } for(i = posLastOpenBracket + 1, j=0; i < posFirstCloseBracket; i++, j++) outstr[j]=instr[i]; outstr[j] = '\0'; for(i = posFirstCloseBracket; i <= strlen(instr); i++) { instr[i - (posFirstCloseBracket - posLastOpenBracket) + 1] = instr[i]; } puts(instr); puts(outstr); getch(); }
Объяснение кода листинга программы
- В начале программы объявляются две строки:
instr
иoutstr
, каждая из которых может содержать до 80 символов. - Затем определяются переменные
i
,j
,posLastOpenBracket
,posFirstCloseBracket
иsizeinstr
. - Далее программа просит ввести строку и сохраняет ее в переменной
instr
. - Затем происходит поиск позиции последнего открывающего скобка в цикле, который итерируется по каждому символу строки
instr
. - Если открывающая скобка не найдена, программа выводит сообщение об ошибке и завершает работу.
- В противном случае, в цикле ищутся закрывающие скобки. Если они найдены, то фиксируется позиция первой закрывающей скобки. Если закрывающие скобки не найдены, программа продолжает поиск.
- Если первая закрывающая скобка находится перед последней открывающей скобкой, программа выводит сообщение об ошибке и завершает работу.
- В противном случае, в цикле копируются символы из исходной строки в выходную строку, начиная с позиции последней открывающей скобки и до, но не включая первую закрывающую скобку.
- Затем символы исходной строки, начиная с позиции первой закрывающей скобки и до последней открывающей скобки, перемещаются в начало строки.
- Выводятся исходная и выходная строки.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д