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

Написать автомат парсер строки

29.02.2016, 15:32. Просмотров 276. Ответов 2
Метки нет (Все метки)

Условия задачи
написать автомат, которы принимает язык L={v | v содержащий или bbb, или cbc, но не оба} алфавит Σ={a, b, c}

-програма должна содержать функцию, которая принимает символы в стринг(string) и возвращает "да, нет" (bool)

дошел до этого но не могу понять где у меня промах так как результат выдает последний саут, может где-то с иф напортачил. заранее благодарю !

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
#include <iostream>
#include <string>
 
using namespace std;
 
 
bool just_abc (string z) //checking if there is only abc
{
    int n = z.size();   //string long
    for(int i = 0; i > n; i++)
    {
        if(z[i] != 'a' || z[i] != 'b' || z[i] != 'c')   //chacking if there is something more than abc
        {
            return false;
        }
    }
    return true;
}
 
bool chacking_3b (string z)  //chacking on triple b
{
    int n = z.size();
    for(int i = 0; i < (n-2); i++)
    {
        if(z[i] == 'b' && z[i+1] == 'b' && z[i+2] == 'b')   //chacking inthere is 3b
        {
            return true;
        }
    }
    return false;
}
 
bool checking_cbc (string z) //chacking if there is cbc
{
    int n = z.size();
    for(int i = 0; i < (n-2); i++)
    {
        if(z[i] == 'c' && z[i+1] == 'b' && z[i+2] == 'c')   //chacking cbc
        {
            return true;
        }
    }
    return false;
}
 
int main()
{
    string s;
    cin >> s;
    if (just_abc(s) == true) //if there is only abc symbols then continue, else it will breack
    {
        if((chacking_3b(s) == true && checking_cbc(s) == false) || (chacking_3b(s) == false && checking_cbc(s) == true)) //if there is only bbb or cbc combination than it's true, if both than false
        {
            cout << "word belong to language!";
        }
        else
        {
            cout << "word not belong to language! Are both";
        }
    }
    else{cout << "word not belong to language! more symbols";
    }
    return 0;
}
Добавлено через 1 час 6 минут
с одной проблемой разобрался, в 10 строке исправил на for(int i = 0; i > n; i++), но теперь получается про первый bool не корректно работает, и не проверяет на наличие лишних символов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2016, 15:32
Ответы с готовыми решениями:

Написать парсер, разделяющий строки на подстроки (файловый ввод/вывод)
Подкиньте пожалуйста идей для решения задачи

Написать клеточный автомат Аква-тор
Нужно написать программу , клеточный автомат Аква-тор на С++, Visual Basic или...

Написать скобочный парсер строк
Если в строке нет скобок или скобки парные, то строка нормальная В противном...

парсер строки
Народ, помогите, плиз! проблема такая : сперва считываю строку из файла ...

Как написать парсер математических функций?
Доброго времени суток. Хотелось бы узнать, как мне придти к тому, чтобы...

2
sebis
0 / 0 / 1
Регистрация: 19.10.2015
Сообщений: 8
02.03.2016, 11:32  [ТС] 2
разобрался, если кому интересно вот код.

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
#include <iostream>
#include <string>
 
using namespace std;
 
 
bool just_abc (string q) //checking if there is only abc
{
    int n = q.size();   //string long
    for(int i = 0; i < n; i++)
    {
        if((q[i] != 'a') && (q[i] != 'b') && (q[i] != 'c'))   //chacking if there is something more than abc
        {
            return false;
        }
    }
    return true;
}
 
bool checking_cbc (string q) //chacking if there is cbc
{
    int n = q.size();
    for(int i = 0; i < (n-2); i++)
    {
        if(q[i] == 'c' && q[i+1] == 'b' && q[i+2] == 'c')   //chacking cbc
        {
            return true;
        }
    }
    return false;
}
bool chacking_3b (string q)  //chacking on triple b
{
    int n = q.size();
    for(int i = 0; i < (n-2); i++)
    {
        if(q[i] == 'b' && q[i+1] == 'b' && q[i+2] == 'b')   //chacking inthere is 3b
        {
            return true;
        }
    }
    return false;
}
 
int main()
{
    string y;
    cin >> y;
    if (just_abc(y) == true) //if there is only abc symbols then continue, else it will breack
    {
        if((chacking_3b(y) == true && checking_cbc(y) == false) || (chacking_3b(y) == false && checking_cbc(y) == true)) //if there is only bbb or cbc combination than it's true, if both than false
        {
            cout << "word belong to language!";
        }
        else
        {
            cout << "word not belong to language! are both ";
        }
    }
    else
    {
        cout << "word not belong to language! more symbols";
    }
    return 0;
}
0
Mr.X
Эксперт С++
3179 / 1706 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.03.2016, 14:19 3
Цитата Сообщение от sebis Посмотреть сообщение
написать автомат
И где же он?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2016, 14:19

Написать парсер строк (файловый ввод/вывод)
Здравствуйте! Подскажите, пожалуйста, каким образом можно считать числа из...

Написать парсер строк, убирающий лишние пробелы
Помогите пожалуйста, срочно, сдаю лабу, а один момент не учел, и из-за этого...

Написать программу на поиск закономерностей в двоичном коде (парсер)
Доброго времени суток. На самом деле я не знаю язык С/C++. Но мне необходима...


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

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

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