Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 25
1

Проверить правильность расстановки в строке скобок (баланс открывающих и закрывающих скобок)

05.03.2018, 22:12. Просмотров 3189. Ответов 9
Метки нет (Все метки)


помогите с решением задачи.

Запросить у пользователя ввод значений согласно варианту. Выполнить задание согласно варианту. После завершения выполнения программы запросить у пользователя его желание повторить выполнение программы и если это желание будет положительным то очистить экран и начать выполнение программы заново.

задание

Запросить у пользователя строку, содержащую латинские буквы и скобки двух видов: "()", "[]". Проверить правильность расстановки в строке скобок (баланс открывающих и закрывающих скобок).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2018, 22:12
Ответы с готовыми решениями:

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

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

Баланс открывающих и закрывающих круглых скобок
помогите написать программу в си шарп(я не разбираюсь там): Проверить, имеется ли в заданном тексте...

Проверить правильность расстановки круглых скобок в выражении
Дана последовательность символов длины n (n>=1) Написать метод, который проверяет круглых скобок в...

9
2760 / 1998 / 1004
Регистрация: 14.08.2016
Сообщений: 6,857
06.03.2018, 01:29 2
ну а где собственные попытки?
что в лекциях написано?
0
72 / 72 / 96
Регистрация: 29.09.2012
Сообщений: 232
06.03.2018, 08:53 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool d = true;
            do
            {
                Console.WriteLine("Введите строку");
                string str = Console.ReadLine();
                int k = 0, k1 = 0;
                for (int i = 0; i < str.Length; i++)
                {
                    if (str[i] == '(')
                        k++;
 
                    if (str[i] == ')')
                        k--;
 
                    if (str[i] == '[')
                        k1++;
 
                    if (str[i] == ']')
                        k1--;
                }
                if (k == 0 && str.Length != 0)
                {
                    Console.WriteLine("Баланс скобок () соблюден");
                }
                else Console.WriteLine("Баланс скобок () несоблюден");
 
                if (k1 == 0 && str.Length != 0)
                {
                    Console.WriteLine("Баланс скобок [] соблюден");
                }
                else Console.WriteLine("Баланс скобок [] несоблюден");
 
                Console.WriteLine("Повторить ввод?\nДа\\Нет?");
                string str1 = Console.ReadLine();
                if (str1 == "Да") 
                {
                    Console.Clear();
                    d = true;
                }
                else
                    d = false;               
            } while (d == true);
        }
    }
0
Эксперт .NET
14834 / 11222 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
06.03.2018, 10:10 4
Andrey_sava, хорошая попытка, но решение к сожалению не проверяет правильность расстановки скобок.
Строка вида ")(" пройдет как правильная.
1
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
06.03.2018, 10:41 5
Предположим вот так. Если решать по классике.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  private static bool Check(string str)
        {
            var pair = new Dictionary<char, char>
            {
                {')','(' },
                {']','[' },
            };
            var brackets = new Stack<char>();
            foreach (var ch in str)
            {
                if (ch == '[' || ch == '(')
                    brackets.Push(ch);
 
                if (ch == ']' || ch == ')')
                {
                    if (brackets.Count == 0)
                        return false;
                    if (brackets.Pop() != pair[ch])
                    {
                        return false;
                    }
                }
            }
            return brackets.Count == 0;
        }
        public static void Main()
        {
            var res = Check("as[sf[sd[dw]sd]]()[([lol])]");
            Console.WriteLine(res ? "Баланс!!" : "Всё тлен!");
            Console.ReadLine();
        }
0
Эксперт .NET
14834 / 11222 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
06.03.2018, 11:02 6
Цитата Сообщение от Kill100 Посмотреть сообщение
C#
1
2
3
4
5
            var pair = new Dictionary<char, char>
            {
                {')','(' },
                {']','[' },
            };
Начиная с шестой версии шарпа можно инициализировать так:
C#
1
2
3
4
5
            var pair = new Dictionary<char, char>
            {
                [')'] = '(',
                [']'] = '[',
            };
Красота!
0
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
06.03.2018, 13:45 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Красота!
попахивает JS по этому не юзаю такое...
0
Эксперт .NET
14834 / 11222 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
06.03.2018, 13:52 8
Цитата Сообщение от Kill100 Посмотреть сообщение
попахивает JS по этому не юзаю такое.
Серьезно?
Не используете синтаксис только потому, что в каком-то другом языке есть похожий?
0
0 / 0 / 0
Регистрация: 07.11.2017
Сообщений: 6
06.03.2018, 15:21 9
Ещё актуальная тема? Есть решение.
0
Модератор
2764 / 1918 / 418
Регистрация: 26.03.2015
Сообщений: 7,105
06.03.2018, 17:22 10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool CheckBrackets(string s)
{
    int i = 0;
    while(i < s.Length)
        if(!ReadExpression(s, ref i))
            return false;
    return true;
}
 
bool ReadExpression(string s, ref int i)
{
    switch(s[i++])
    {
        case '[': return ReadBrackets(s, ref i, ']');
        case '(': return ReadBrackets(s, ref i, ')');
        default:  return false;
    }
}
 
 
bool ReadBrackets(string s, ref int i, char end)
{
    while(i < s.Length && s[i] != end)
        ReadExpression(s, ref i);
    return i++ < s.Length;
}
Добавлено через 21 секунду
з.ы. Работоспособность почти не проверял.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2018, 17:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Проверить баланс скобок в строке
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то...

Правильность расстановки скобок
Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть...

Проверка на правильность расстановки скобок
Дан текст. Проверить, правильно ли в нем расставлены круглые скобки (т. е. находится ли справа от...

Написать программу, проверяющую правильность расстановки скобок
1 «Арифметическое выражение». Исходные данные - арифметическое выражение. Написать программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.