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

Составление грамматики - C++

Восстановить пароль Регистрация
 
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
19.02.2013, 18:45     Составление грамматики #1
Кто делал задачу из книги Страуструпа "Принципы и практика использования С++":

Напишите программу, проверяющую корректность предложений в соответствии с правилами грамматики английского языка из раздела 6.4.1. Будем считать, что каждое предложение заканчивается точкой, окруженной пробелами. Например, фраза birds fly but the fish swim . является предложением, а фразы but birds fly but the fish swim (пропущена точка) и birds fly but the fish swim. (перед точкой нет пробела)— нет. Для каждого введенного предложения программа должна просто отвечать “Да” или “Нет”. Подсказка: не возитесь с лексемами, просто считайте строку с помощью оператора».

Последняя подсказка только запутывает. До этого учился делать калькулятор по его схеме, не пойму, там аналогичный принцип использовать? и вообще, щас голова не работает вообще....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 19:07     Составление грамматики #2
Цитата Сообщение от strange_man Посмотреть сообщение
Подсказка: не возитесь с лексемами, просто считайте строку с помощью оператора».
Старина Бьерн просто говорит тебе, заведи переменную под хранение обрабатываемой строки, которую вводи целиком перед анализом, скажем, так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
using namespace std;
 
int main()  {
 
    /* подготавливаем анализируемую строку */
    string inputStr;
    getline( cin, inputStr );
    
    cout << inputStr << endl; // вот она, наша строка
 
    return 0;
}
Вообще, когда речь идет об анализе строки на соответствие грамматике - в качестве элементов выступают "лексемы". Данное понятие фигурирует повсеместно в области, например, построения трансляторов. Лексемами тут можно было назвать birds, fly, и т.д., т.е. наборы символов, разделенных пробелом.

Старина Бьерн считает, что тебе целесообразнее обрабатывать строку целиком на предмет наличия в ней точки, окруженной пробелами. Мне так думается)
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
19.02.2013, 19:09  [ТС]     Составление грамматики #3
только точки???
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
19.02.2013, 19:39     Составление грамматики #4
Ну это как тебе вздумается, скажем, формулировка задания не запрещает мне следующую строку считать предложением:

asd834r9238u9f 98359 78h&)&Y^)(*&@#&^ .

Поскольку единственный критерий, который там обозначен - окружение пробелами. Впрочем, там фигурирует фраза "английский язык", значит, полагаю, целесообразно так же смотреть, входят ли символы в предложении в область допустимых значений, коей является множество латинских символов.
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
21.02.2013, 18:13  [ТС]     Составление грамматики #5
и все же, я все равно не могу понять, как определить наличие точки, окруженной пробелами
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
21.02.2013, 18:59     Составление грамматики #6
C++
1
2
3
4
if(str[i]==' ')
    if(str[i+1]=='.'&&str[i+2]==' '){
        //...
    }
Добавлено через 48 секунд
только нужно помнить про длину если используете string или про нульбайт, если char
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
21.02.2013, 19:11  [ТС]     Составление грамматики #7
Цитата Сообщение от MrGrig Посмотреть сообщение
C++
1
2
3
4
if(str[i]==' ')
    if(str[i+1]=='.'&&str[i+2]==' '){
        //...
    }
Добавлено через 48 секунд
только нужно помнить про длину если используете string или про нульбайт, если char
спасибо, правда я не уверен, что в учебнике было сказано о "прохождении" по строке с помощью цикла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 07:16     Составление грамматики
Еще ссылки по теме:

C++ Страуструп. Грамматики. Парсер
C++ Конечные автоматы и грамматики - разобрать код
C++ Сделать вывод КС-грамматики

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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
22.02.2013, 07:16     Составление грамматики #8
ну если у вас в 1й строке одно предложение, либо они какимто образом заданы в массиве, но в одном, то тогда можно проверять 3 последних элемента. Если же несколько строк в одном массиве, то тут уже никак без цикла
чтото типо
C++
1
2
3
4
int len=strlen(str);//char
if(str[str.size()]==' '&&str[str.size()-1]=='.'&&str[str.size()-2]==' '){//str[len]==' '&&str[len-1]=='.'&&str[len-2]==' ' char
    //...
}
Yandex
Объявления
22.02.2013, 07:16     Составление грамматики
Ответ Создать тему
Опции темы

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