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

Проверять строку на баланс скобок

22.01.2015, 20:42. Показов 1329. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Драствуйте. Условие такое - написать програмку которая будет проверять строку на баланс скобок (закрытые, открытые) и чтобы текст читало с файла.

Проверте пожалуйста

Добавлено через 29 минут
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
 
 
 
bool IsRight(const char*& text, size_t current)
{
   static const std::string Skobu = "{}[]()<>";
 
   bool isOk = true;
 
   for (; *text && isOk; ++text)
   {
      size_t find = Skobu.find_first_of(*text);
 
      if (find != std::string::npos)
      {
        if ((find % 2) == 0)
         {
            isOk = IsRight(++text, find);
         }
         else
         {
            isOk = ((find - current) == 1);
 
            if (current != std::string::npos)
            {
               return isOk;
            }
         }
      }
   }
 
   if (current != std::string::npos)
   {
      isOk = false;
   }
 
   return isOk;
}
 
bool IsRight(const std::string& text)
{
   const char* txt = text.c_str();
 
   return IsRight(txt, std::string::npos);
   
   std::cout << (IsRight(text) ? "right" : "not right") << std::endl;
   
         system("PAUSE");
 
   return 0;
}
 
int main(int argc, const char* argv[])
{
   setlocale (LC_ALL, "RUS");
   int n=0;
   char text;
   fstream F;
   
   F.open("D:\\accounts.txt");
   
   if (F)
        {
         while (!F.eof())
                        {
                         F>>text;
                         cout<<text<<"\t";
                         n++;
                        }
 
         F.close();
 
         cout<<"n="<<n<<endl;
        }
    else cout<<" Ôàéë íå ñóùåñòâóåò";
  
    
}
Работает не правильно помогите исправить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2015, 20:42
Ответы с готовыми решениями:

Ввести строку символов и найти баланс открывающихся и закрывающихся скобок
ввести строку символов и найти баланс открывающихся и закрывающихся скобок

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

Баланс скобок
проверить правильность расстановки скобок, используя контейнерные типы(стек)

Баланс скобок
Люди может укажите мне на ошибку в программе по которой не находит баланс..? #include&lt;iostream.h&gt;...

8
Модератор
5102 / 3329 / 535
Регистрация: 01.06.2013
Сообщений: 6,952
Записей в блоге: 9
22.01.2015, 20:57 2
find_first_of Вы используете наоборот. Т.е. она ищет в "своей" строке любой символ из аргумента. Вам нужно input_text.find_first_of("{}[]()<>"), если уж хотите её использовать.
0
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 6
23.01.2015, 17:39  [ТС] 3
не помогло
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37311 / 20744 / 4273
Регистрация: 12.02.2012
Сообщений: 34,142
Записей в блоге: 14
23.01.2015, 18:03 4
Ужасный код... Функция не вызывается из main. А проверить баланс круглых скобок - пара пустых:

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
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
int main(int argc, char *argv[])
{
   fstream F;
   char    s;
   int     n;
   
   F.open("D:\\accounts.txt");
   n=0;
   
   if (F)
        {
         while (!F.eof())
                        {
                         F>>s;
                         if (s=='(') n++;
                         if (s==')') n--;
                         if (n<0) break;
                        }
         F.close();
         if (n==0)
            cout << "OK!" << endl;
         else
            cout << "Bad structure" << endl;    
        }
    else cout << "Cannot open file" << endl;
      
    system("PAUSE");
    return EXIT_SUCCESS;
 
}
0
115 / 14 / 21
Регистрация: 07.12.2013
Сообщений: 58
23.01.2015, 18:08 5
а не проще просто идти по файлу, и если встретили открывающую скобку {[(< увеличили переменную а на 1
встретили закрывающую скобку увеличили переменную b на 1
типо
C++
1
2
3
for (i=0;i<length;i++){
if (stroka[i]=='{') || (stroka[i]=='[') || (stroka[i]=='(') || (stroka[i]=='<') { a++;}
if (stroka[i]=='}') || (stroka[i]==']') || (stroka[i]==')') || (stroka[i]=='>') { b++;}
после чего в конце программы проверяем
C++
1
2
3
4
5
if (a==b) { 
cout<< "Скобки расставлены верно" << "\n"; 
} else {
cout<< "Скобки расставлены неверно" << "\n"; 
}
1
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 6
23.01.2015, 18:16  [ТС] 6
попробую
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37311 / 20744 / 4273
Регистрация: 12.02.2012
Сообщений: 34,142
Записей в блоге: 14
23.01.2015, 18:23 7
Mblp, а я так и делаю... Но этого недостаточно: вот такая конструкция ")(" неправильна, а твой алгоритм ее пропустит. Смотри мой код внимательно.
1
Модератор
5102 / 3329 / 535
Регистрация: 01.06.2013
Сообщений: 6,952
Записей в блоге: 9
23.01.2015, 18:36 8
Цитата Сообщение от RudolfKrantz Посмотреть сообщение
не помогло
Вы же сами хотите программу написать, а не чтобы за Вас написали?
Возьмите за основу то что Вам Catstail предложил и переделайте для контроля нескольких типов скобок. (Или свой вариант допилите).
Вам понадобится стек (последним вошёл - первым вышел). Обычно используют
C++
1
#include <stack>
Но, если он непонятен, можно хоть обычную строку std::string. Появилась открывающая скобка - её в коней строки. Появилась закрывающая - глянули в конец строки. Если там подходящая - удалили последний символ. В конце строка должна оказаться пустой. Думаю, понятно.

Хотя со <stack> удобнее. http://itblogs.org/struktury-dannyx-stek/
0
0 / 0 / 0
Регистрация: 13.02.2014
Сообщений: 6
23.01.2015, 20:01  [ТС] 9
Огромное вам всем спасибо за вашу помощь

Добавлено через 57 минут
0
23.01.2015, 20:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2015, 20:01
Помогаю со студенческими работами здесь

Баланс скобок
Помогите пожалуйста!!! Собственно задание: Текст в файле содержит многократно вложенные круглые...

Баланс скобок
Добавьте плиз условие чтоб )(-говорило что не баланс..я прост незнаю #include &lt;stdio.h&gt;...

Баланс скобок в файле
#include&lt;fstream.h&gt; #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; ...

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

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

Баланс фигурных скобок в файле
Вообщем нужно прочитать текст (любая программа, в файле name.txt) из файла и проверить баланс...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru