Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
1

Проверка баланса кавычек четырех видов

10.10.2018, 10:54. Просмотров 251. Ответов 14

Здравствуйте! Подскажите, как можно написать программу, которая в данной строке проверяет правильность расстановки кавычек 4-х видов:', ", \', \". Не знаю как определять, является кавычка открывающей или закрывающей. Была идея для каждого типа поставить флаг, но, кажется, это не рациональный способ. Может есть другие варианты?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2018, 10:54
Ответы с готовыми решениями:

Проверка баланса скобок
Как задать условие в проверке баланса скобок, что если скобки окажутся НЕ пустыми, тое сть внутри...

Проверка баланса скобок арифметического выражения, введенного с клавиатуры
Составить программу проверки баланса скобок арифметического выражения , введенного с клавиатуры.

Проверка к какой из четырех последовательностей принадлежит число
Здравствуйте, уважаемые форумчане! У меня такой вопрос: можно ли как-то очень быстро проверить к...

Нарисуйте сетку 20х20, состоящую из разноцветных прямоугольных треугольников четырех видов, различающихся расп
нарисуйте сетку 20х20, состоящую из разноцветных прямоугольных треугольников четырех видов,...

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

14
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
10.10.2018, 11:22 2
Цитата Сообщение от tugunchinov Посмотреть сообщение
Не знаю как определять, является кавычка открывающей или закрывающей.
Из тех, что перечислены, разницы нет между открывающей и закрывающей. Для провеки баланса надо просто следить, чтобы после кавычки одного вида шла такая же, а после пары кавычек должна идти та же, что была до этой пары, и т.д.
0
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,721
Записей в блоге: 2
Завершенные тесты: 1
10.10.2018, 11:34 3
Ищи решение задачи про баланс скобок, переделай его под ковычки.
0
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
10.10.2018, 11:39  [ТС] 4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ищи решение задачи про баланс скобок, переделай его под ковычки.
Скобки четко разделяются на открывающие - (,{ - и закрывающие - ), }. А кавычки - нет.

Добавлено через 1 минуту
Цитата Сообщение от John Prick Посмотреть сообщение
Из тех, что перечислены, разницы нет между открывающей и закрывающей. Для провеки баланса надо просто следить, чтобы после кавычки одного вида шла такая же, а после пары кавычек должна идти та же, что была до этой пары, и т.д.
А если у меня миллион кавычек? Где я буду их хранить?
И как я проверю, что пора остановить сборку кавычек?
0
10.10.2018, 11:39
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,721
Записей в блоге: 2
Завершенные тесты: 1
10.10.2018, 11:52 5
Цитата Сообщение от tugunchinov Посмотреть сообщение
Скобки четко разделяются на открывающие - (,{ - и закрывающие - ), }
Поэтому в задаче про скобки нужны доп. проверки
Цитата Сообщение от tugunchinov Посмотреть сообщение
А кавычки - нет.
Поэтому решение легче. Логика-то такая же - создаем стек и вперед.
0
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
10.10.2018, 11:58  [ТС] 6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Поэтому решение легче. Логика-то такая же - создаем стек и вперед.
Вот такая строка например - "....'...."....'
В стек: ", '. Третья кавычка - открывающая? Тогда в стек: ", ', ". Уже неверно.
А может закрывающая? Тогда для второй кавычки нет закрывающей или для третей - открывающей?
0
Kastaneda
Jesus loves me
Эксперт С++
5037 / 3056 / 349
Регистрация: 12.12.2009
Сообщений: 7,721
Записей в блоге: 2
Завершенные тесты: 1
10.10.2018, 11:59 7
да, тупанул, задача сложнее
0
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
11.10.2018, 05:50  [ТС] 8
В общем, появилась такая идея: когда встретил кавычку, ищу такую же, пропуская все символы, если нашел, то проверяю подстроку, начиная с открывающей кавычки, заканчивая закрывающей.
0
lArtl
308 / 164 / 73
Регистрация: 09.10.2014
Сообщений: 766
Завершенные тесты: 3
11.10.2018, 06:06 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
да, тупанул, задача сложнее
Заменить стек на дек и проверять стек на наличие кавычки?
0
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
11.10.2018, 10:10  [ТС] 10
Цитата Сообщение от lArtl Посмотреть сообщение
Заменить стек на дек и проверять стек на наличие кавычки?
Заменю я стек на дек, и что?
0
hoggy
Эксперт С++
7115 / 3160 / 651
Регистрация: 15.11.2014
Сообщений: 7,263
Завершенные тесты: 1
11.10.2018, 11:23 11
Цитата Сообщение от tugunchinov Посмотреть сообщение
если нашел, то проверяю подстроку
плохая идея.

у вас конечный автомат с двумя состояниями: нет_кавычек, кавычка_открылась.

1.
если стек пуст - значит нет_кавычек.
2.
если в стеке есть кавычка - ищем закрывающую.
3.
если на путях встретилась другая кавычка (не закрывающая) - добавляем в стек, и далее пункт 2.
4.
если строка закончилась, а стек не пуст - значит ошибка: "отсутствует закрывающая кавычка"

пример: "....'...."....'

stack { " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия

error("отсутствует закрывающая кавычка [']");
пример: "....'...."....'..."....'....'...."

stack { " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ', " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ', ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
нашли закрывающую ['] --> выкидываем из стека ---> stack { ", ', ", ', " };
....
нашли закрывающую ["] --> выкидываем из стека ---> stack { ", ', ", ' };
....
error("отсутствует закрывающая кавычка [']");
0
lArtl
308 / 164 / 73
Регистрация: 09.10.2014
Сообщений: 766
Завершенные тесты: 3
11.10.2018, 15:55 12
Цитата Сообщение от tugunchinov Посмотреть сообщение
Заменю я стек на дек, и что?
теперь прочтите вторую часть фразы
0
tugunchinov
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 12
12.10.2018, 08:38  [ТС] 13
Цитата Сообщение от hoggy Посмотреть сообщение
пример: "....'...."....'
stack { " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
error("отсутствует закрывающая кавычка [']");

Здесь же нет двух закрывающих кавычек.
0
Croessmah
++Ͻ
15317 / 8692 / 1659
Регистрация: 27.09.2012
Сообщений: 21,435
Записей в блоге: 2
Завершенные тесты: 2
12.10.2018, 09:24 14
Цитата Сообщение от tugunchinov Посмотреть сообщение
Здесь же нет двух закрывающих кавычек.
Сколько, где и каких кавычек не хватает - это уже детали, которые можно доработать как нужно.
0
hoggy
Эксперт С++
7115 / 3160 / 651
Регистрация: 15.11.2014
Сообщений: 7,263
Завершенные тесты: 1
12.10.2018, 11:35 15
Цитата Сообщение от tugunchinov Посмотреть сообщение
Здесь же нет двух закрывающих кавычек.
Цитата Сообщение от tugunchinov Посмотреть сообщение
error("отсутствует закрывающая кавычка [']");
Ваш К. О.
0
12.10.2018, 11:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2018, 11:35

Проверка баланса скобок
#include&lt;stdio.h&gt; #include&lt;string.h&gt; struct NODE { char info; NODE *next; }; struct...

[Программа] Проверка баланса (Ростелеком)
Начну с того, что бОльшая часть полезного кода (получение данных из &quot;нового личного кабинета&quot;) была...

Строки: проверка баланса скобок
Проверить баланс скобок в выражении.


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

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

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