Проанализировать правильность расставленных скобок - 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();
}

Объяснение кода листинга программы

  1. В начале программы объявляются две строки: instr и outstr, каждая из которых может содержать до 80 символов.
  2. Затем определяются переменные i, j, posLastOpenBracket, posFirstCloseBracket и sizeinstr.
  3. Далее программа просит ввести строку и сохраняет ее в переменной instr.
  4. Затем происходит поиск позиции последнего открывающего скобка в цикле, который итерируется по каждому символу строки instr.
  5. Если открывающая скобка не найдена, программа выводит сообщение об ошибке и завершает работу.
  6. В противном случае, в цикле ищутся закрывающие скобки. Если они найдены, то фиксируется позиция первой закрывающей скобки. Если закрывающие скобки не найдены, программа продолжает поиск.
  7. Если первая закрывающая скобка находится перед последней открывающей скобкой, программа выводит сообщение об ошибке и завершает работу.
  8. В противном случае, в цикле копируются символы из исходной строки в выходную строку, начиная с позиции последней открывающей скобки и до, но не включая первую закрывающую скобку.
  9. Затем символы исходной строки, начиная с позиции первой закрывающей скобки и до последней открывающей скобки, перемещаются в начало строки.
  10. Выводятся исходная и выходная строки.
  11. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы