|
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 80
|
||||||
Рекурсивные функции проверяют верность записанного числа08.11.2019, 21:22. Показов 2329. Ответов 2
Нужно при помощи рекурсивных функций по данному своду правил проверить верность написания строки типа const string в c++.
<вещественное число> ::= <знак> <мантисса> <порядок> <мантисса> ::= <целое без знака> . <целое без знака> <порядок> ::= E <знак> <целое без знака> <целое без знака> ::= <цифра> | <цифра> <целое без знака> <цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 |7 | 8 | 9 <знак> ::= + | - Я написал начальные проверки через substr, но на мантиссе я не знаю как можно (и можно ли) обойти точку, так как мы не знаем количество символов до нее. Или посоветуйте альтернативное решение, потому что "легально" обойти точку я не знаю как.
0
|
||||||
| 08.11.2019, 21:22 | |
|
Ответы с готовыми решениями:
2
|
|
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 2
|
|
| 06.11.2022, 17:00 | |
|
Встретилось такое же задание, решал по-своему, может кому-нибудь пригодится
#include <iostream> #include <string> int i = 0; bool isMantissa(std::string s); bool isOrder(std::string s); bool real_number(std::string s){ if (i == s.size()){ return true; } bool flag = false; if (s[i] != 'e'){ if (!flag){ if(isMantissa(s)){ return isMantissa(s); } return false; } else{ if(isOrder(s)){ i++; return isOrder(s); } return false; } } else{ flag = true; i++; } return false; } bool isSign(char s){ if (s == '-' || s == '+'){ return true; } return false; } bool isDigit(char s){ if (int(s) >= 48 && int(s) <= 57){ return true; } return false; } bool isOrder(std::string s){ if (isSign(s[i]) || isDigit(s[i])){ return true; } return false; } bool isMantissa(std::string s){ if (s[i] == '.'){ i++; return true; } if((i == 0 && !isDigit(s[i])) || (s[i - 1] == 'e')){ if(!isSign(s[i])){ return false; } i++; return true; } if(!isDigit(s[i])){ return false; } i++; return true; } int main(){ std::string s; std::cin >> s; if(real_number(s)){ std::cout << "true"; } else{ std::cout << "false"; } return 0; }
0
|
|
|
0 / 0 / 0
Регистрация: 06.11.2022
Сообщений: 2
|
|
| 07.11.2022, 15:30 | |
|
Немного доделал программу
#include <iostream> #include <string> int i = 0; bool isMantissa(std::string s); bool isOrder(std::string s); bool flag = false; bool real_number(std::string s, int size){ if (i == size){ return true; } if (!flag){ if (s[i] == 'e'){ if (i < size - 2){ isOrder(s); flag = true; i++; return real_number(s, size); } else{ return false; } } else{ if (isMantissa(s)){ i++; return real_number(s, size); } else{ return false; } } } else{ if(isOrder(s)){ i++; return real_number(s, size); } else{ return false; } } } bool isSign(char s){ if (s == '-' || s == '+'){ return true; } return false; } bool isDigit(char s){ if (int(s) >= 48 && int(s) <= 57){ return true; } return false; } bool flag_point = false; bool isMantissa(std::string s){ if (s[i] == '.' && !flag_point){ flag_point = true; return true; } else{ if (isDigit(s[i])){ return true; } else{ return false; } } } bool flag_e = false; bool flag_sign = false; bool isOrder(std::string s){ if (s[i] == 'e' && !flag_e){ flag_e = true; return true; } else{ if (!flag_sign){ if (isSign(s[i])){ flag_sign = true; return true; } } else{ if (isDigit(s[i])){ return true; } else{ return false; } } } } int main(){ std::string s; std::cin >> s; if(real_number(s, s.length())){ std::cout << "true"; } else{ std::cout << "false"; } return 0; }
0
|
|
| 07.11.2022, 15:30 | |
|
Помогаю со студенческими работами здесь
3
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|