Форум программистов, компьютерный форум CyberForum.ru

Проверить правильность расстановки скобок - C++

Восстановить пароль Регистрация
 
bldY
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 8
16.03.2014, 22:52     Проверить правильность расстановки скобок #1
Помогите написать программу на c++.
Дана строка, содержащая латинские буквы и скобки трех видов: «()», «[]», «{}». Если скобки расставлены правильно (т. е. каждой открывающей соответствует закрывающая скобка того же вида), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная скобка, или, если закрывающих скобок не хватает, число −1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 22:52     Проверить правильность расстановки скобок
Посмотрите здесь:

Проверить правильность расстановки и вложенности скобок в тексте (абстрактный стек) C++
C++ Проверить правильность расстановки символов “/*” и “*/” для комментариев
C++ Дана строка символов проверить правильность расстановки круглых и квадратных скобок в выражениях
C++ Использование стека. Дана строка символов. Проверьте правильность расстановки в ней круглых скобок.
C++ Строки. Проверить правильность задания круглых скобок
C++ В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе
Проверить правильность расстановки в тексте круглых скобок C++
Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в строке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
16.03.2014, 22:59     Проверить правильность расстановки скобок #2
Используй поиск, такие темы уже были. Реализация через стек
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
12.04.2014, 03:35     Проверить правильность расстановки скобок #3
Цитата Сообщение от bldY Посмотреть сообщение
закрывающая скобка того же вида), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная скобка, или, если закрывающих скобок не хватает, число −1.
bldY, представьте что первая ошибочная скобка стоит вначале:
")123+345"
Функция вернёт 0?
Постановка задачи мне не нравится.
Вот такой вариант показывает неоднозначность:
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
#include <iostream>
#include <string>
using namespace std;
bool verify_parenses(string source_str, char parence_left, char parence_right, int& err_pos){
int cnt=0;
err_pos=0;
int sz = (int)source_str.size();
for(int i = 0; i < sz; ++i){
if( source_str[i] == parence_left )cnt++;
if( source_str[i] == parence_right )cnt--;
if(cnt < 0){
cout<<"\nBad parenses verification by placement \")(\"! \nin bool verify_parenses() \nat source_str:\n"<<source_str<<endl<<endl;
err_pos=i;
return false;
}
    }
if(!cnt)return true; 
cout<<"\nBad parenses verification balans! \nin bool verify_parenses() \nat source_str:\n"<<source_str<<endl<<endl;
err_pos=-1;
return false;
}
 
int main(){
int err_pos;
string str1="((1+2)*3+1)/3"; 
if (verify_parenses(str1, '(', ')', err_pos))cout<<"allright";
cout<<"\nerr_pos= "<<err_pos<<endl;
 
string str2=")(1+2)*3+1/3"; 
if (verify_parenses(str2, '(', ')', err_pos))cout<<"allright";
cout<<"\nerr_pos= "<<err_pos<<endl;
 
string str3="((1+2)*3+1/3"; 
if (verify_parenses(str3, '(', ')', err_pos))cout<<"allright";
cout<<"\nerr_pos= "<<err_pos<<endl;
 
system("pause"); 
    return 0; 
}
Хотя может я и не понял условия.
Yandex
Объявления
12.04.2014, 03:35     Проверить правильность расстановки скобок
Ответ Создать тему
Опции темы

Текущее время: 02:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru