Технологии

Проверить, имеется ли в заданном тексте баланс скобок си++ Не могу найти ошибку. - вопрос №5012202

#include <stdio.h> #include <stdlib.h> int main(void) //Проверить, имеется ли в заданном тексте баланс скобок. { int i=0; int string str[100] = "()"; for(int i = 0; i<str; i++) { if(str[i] == ')'); i++; if(str[i] == '("'); i++; { printf(«Balanced»); printf(«Not Balanced»); printf("\nTekst bez zapyatih: %s", str); return 0; } } }

декабрь 25, 2022 г.

  • Всего ответов: 1

  • Денис - аватарка

    Денис

    36-й в Психологии

    Привет! В коде, который вы предоставили, есть несколько ошибок:

        Неправильно объявлена переменная str. Нужно написать char str[100], а не string str[100].

        Неправильно происходит проверка скобок. У вас есть лишняя точка с запятой после if(str[i] == ')'). Это приводит к тому, что увеличение счетчика i происходит независимо от того, была найдена скобка или нет. Также, вы забыли про проверку открывающей скобки — если встречается открывающая скобка, нужно проверить, есть ли соответствующая ей закрывающая скобка в тексте.

        Внутри блока if(str[i] == '("') есть лишняя открывающая фигурная скобка.

        Код для вывода сообщений о сбалансированности скобок и оригинального текста вместе стоит внутри цикла. Нужно их вынести за пределы цикла.

        Нужно добавить проверку на то, что количество открывающих и закрывающих скобок равно.

    Исправленный код:

    #include <stdio.h>
    #include <stdlib.h>

    int main(void) {
      char str[100] = "()";
      int open = 0, close = 0;

      for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] == '(') {
          open++;
        } else if (str[i] == ')') {
          close++;
        }
      }

      if (open == close) {
        printf(«Balanced\n»);
      } else {
        printf(«Not Balanced\n»);
      }

      printf(«Tekst bez zapyatih: %s\n», str);
      return 0;
    }

    Этот код проверяет, является ли количество открывающих и закрывающих скобок в тексте одинаковым, и выводит соответствующее сообщение. Также выводится оригинальный текст без запятых.

    Обратите внимание, что в этом коде проверяется только одна строка str, которая задана заранее. Если вы хотите, чтобы пользователь мог вводить текст самостоятельно, то нужно использовать функцию gets() или fgets() для ввода строки, а затем работать с ней.

    апрель 12, 2023 г.

Похожие вопросы

поиск в StringGrid C++ builder

июнь 14, 2012 г.

Технологии