|
0 / 0 / 0
Регистрация: 16.10.2019
Сообщений: 80
|
||||||
Рекурсивные функции проверяют верность записанного числа08.11.2019, 21:22. Показов 2289. Ответов 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|