Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
1

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

10.10.2018, 10:54. Показов 2049. Ответов 14

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

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

Проверка баланса
Привет! У меня есть такой код: <form method="post" action="miner.php"> ...

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

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

14
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
10.10.2018, 11:22 2
Цитата Сообщение от tugunchinov Посмотреть сообщение
Не знаю как определять, является кавычка открывающей или закрывающей.
Из тех, что перечислены, разницы нет между открывающей и закрывающей. Для провеки баланса надо просто следить, чтобы после кавычки одного вида шла такая же, а после пары кавычек должна идти та же, что была до этой пары, и т.д.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
10.10.2018, 11:34 3
Ищи решение задачи про баланс скобок, переделай его под ковычки.
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
10.10.2018, 11:39  [ТС] 4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ищи решение задачи про баланс скобок, переделай его под ковычки.
Скобки четко разделяются на открывающие - (,{ - и закрывающие - ), }. А кавычки - нет.

Добавлено через 1 минуту
Цитата Сообщение от John Prick Посмотреть сообщение
Из тех, что перечислены, разницы нет между открывающей и закрывающей. Для провеки баланса надо просто следить, чтобы после кавычки одного вида шла такая же, а после пары кавычек должна идти та же, что была до этой пары, и т.д.
А если у меня миллион кавычек? Где я буду их хранить?
И как я проверю, что пора остановить сборку кавычек?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
10.10.2018, 11:52 5
Цитата Сообщение от tugunchinov Посмотреть сообщение
Скобки четко разделяются на открывающие - (,{ - и закрывающие - ), }
Поэтому в задаче про скобки нужны доп. проверки
Цитата Сообщение от tugunchinov Посмотреть сообщение
А кавычки - нет.
Поэтому решение легче. Логика-то такая же - создаем стек и вперед.
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
10.10.2018, 11:58  [ТС] 6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Поэтому решение легче. Логика-то такая же - создаем стек и вперед.
Вот такая строка например - "....'...."....'
В стек: ", '. Третья кавычка - открывающая? Тогда в стек: ", ', ". Уже неверно.
А может закрывающая? Тогда для второй кавычки нет закрывающей или для третей - открывающей?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
10.10.2018, 11:59 7
да, тупанул, задача сложнее
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
11.10.2018, 05:50  [ТС] 8
В общем, появилась такая идея: когда встретил кавычку, ищу такую же, пропуская все символы, если нашел, то проверяю подстроку, начиная с открывающей кавычки, заканчивая закрывающей.
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
11.10.2018, 06:06 9
Цитата Сообщение от Kastaneda Посмотреть сообщение
да, тупанул, задача сложнее
Заменить стек на дек и проверять стек на наличие кавычки?
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
11.10.2018, 10:10  [ТС] 10
Цитата Сообщение от lArtl Посмотреть сообщение
Заменить стек на дек и проверять стек на наличие кавычки?
Заменю я стек на дек, и что?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
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
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
11.10.2018, 15:55 12
Цитата Сообщение от tugunchinov Посмотреть сообщение
Заменю я стек на дек, и что?
теперь прочтите вторую часть фразы
0
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 13
12.10.2018, 08:38  [ТС] 13
Цитата Сообщение от hoggy Посмотреть сообщение
пример: "....'...."....'
stack { " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', " }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
....
stack { ", ', ", ' }; //<--- добавляем кавычку в стек. ищем такую же для закрытия
error("отсутствует закрывающая кавычка [']");

Здесь же нет двух закрывающих кавычек.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
12.10.2018, 09:24 14
Цитата Сообщение от tugunchinov Посмотреть сообщение
Здесь же нет двух закрывающих кавычек.
Сколько, где и каких кавычек не хватает - это уже детали, которые можно доработать как нужно.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.10.2018, 11:35 15
Цитата Сообщение от tugunchinov Посмотреть сообщение
Здесь же нет двух закрывающих кавычек.
Цитата Сообщение от tugunchinov Посмотреть сообщение
error("отсутствует закрывающая кавычка [']");
Ваш К. О.
0
12.10.2018, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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
Copyright ©2000 - 2024, CyberForum.ru