|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
||||||
Перевод из string в double и обратно: ряд проблем на различные темы06.04.2022, 14:36. Показов 506. Ответов 10
Метки нет (Все метки)
Всем привет. В С++ новичок. На форуме есть похожие темы, но у меня ряд вопросов по различным направлениям.
Необходимо написать программу, которая запрашивает цену формата "$313,123123,123.1233" как строку string, далее конвертирует строку в double, убирая все, кроме цифр и точки, и сохраняет в поле класса. При выводе запрошенной цены конвертирует в строку string и выводит в формате "$123,132,123.213,123,2314" - через каждые три цифры ",". Написал следующий код:
1. Если вводить большое число, получаю: free(): invalid pointer. Аварийный останов (стек памяти сброшен на диск). gdb выдает: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7bfacfb in __GI___libc_free (mem=<optimised out>) at malloc.c:3277 3277 malloc.c: Нет такого файла или каталога. (gdb) bt #0 0x00007ffff7bfacfb in __GI___libc_free (mem=<optimised out>) at malloc.c:3277 #1 0x0000555555556c31 in Money::stringConvertDouble (this=0x7fffffffde70, string="$23421341234,2341234.12341234") at convert_string_in_double.cpp:56 #2 0x0000555555556973 in Money::setMoney (this=0x7fffffffde70) at convert_string_in_double.cpp:24 #3 0x00005555555566c8 in main () at convert_string_in_double.cpp:92 То, что выдал gdb - для меня "темный лес"... 2. Компилятор выдает warning: control reaches end of non-void function [-Wreturn-type] по строке 56. Вроде бы в функции return есть, тогда в связи с чем предупреждение? 3. Если в for вместо size_t прописать int, выдает warning: conversion to ‘std::__cxx11::basic_string<char>::size_ type’ {aka ‘long unsigned int’} from ‘int’ may change the sign of the result [-Wsign-conversion]. В связи с чем оно? 4. Если заменить в 40 строке stringNew[i++] на stringNew.at (i++), то получаю: terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::at: __n (which is 0) >= this->size() (which is 0) Аварийный останов (стек памяти сброшен на диск). gdb выдает: Program received signal SIGABRT, Aborted. __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737348309376) at pthread_kill.c:44 44 pthread_kill.c: Нет такого файла или каталога. (gdb) bt #0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140737348309376) at pthread_kill.c:44 #1 __pthread_kill_internal (signo=6, threadid=140737348309376) at pthread_kill.c:80 #2 __GI___pthread_kill (threadid=140737348309376, signo=signo@entry=6) at pthread_kill.c:91 #3 0x00007ffff7b98476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0x00007ffff7b7e7b7 in __GI_abort () at abort.c:79 #5 0x00007ffff7e39a31 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007ffff7e454ec in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x00007ffff7e45557 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6 #8 0x00007ffff7e457f9 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6 #9 0x00007ffff7e3c448 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #10 0x00007ffff7edfa93 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::at(unsigned long) () from /lib/x86_64-linux-gnu/libstdc++.so.6 #11 0x0000555555556ac5 in Money::stringConvertDouble (this=0x7fffffffde70, string="$324,234.24324") at convert_string_in_double.cpp:39 #12 0x0000555555556953 in Money::setMoney (this=0x7fffffffde70) at convert_string_in_double.cpp:24 #13 0x00005555555566a8 in main () at convert_string_in_double.cpp:92 Вроде бы как за границы строки не выхожу... 5. Не могу найти у себя core файлы. В общем, вот такие проблемы. Не могу в них разобраться. Буду рад любой помощи, хотел бы понять, что не так и почему, как это "под капотом" работает. Так же буду рад любым замечаниям по коду.
0
|
||||||
| 06.04.2022, 14:36 | |
|
Ответы с готовыми решениями:
10
Преобразование string в double и обратно Преобразование double в String и обратно! Как преобразовать string в double и обратно? |
|
фрилансер
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
|
||||||||||||||
| 06.04.2022, 14:57 | ||||||||||||||
|
... Добавлено через 3 минуты как-нибудь так
или даже так
1
|
||||||||||||||
|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
||
| 06.04.2022, 15:14 [ТС] | ||
|
Уважаемый Алексей1153, большое спасибо за предложенные варианты, буду разбираться.
0
|
||
|
фрилансер
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
|
|
| 06.04.2022, 15:41 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
||
| 06.04.2022, 15:58 [ТС] | ||
|
0
|
||
|
фрилансер
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
|
|
| 06.04.2022, 16:38 | |
|
Shimon, неопределённое поведение. Индекс должен быть меньше значения, полученного из метода size() строки
0
|
|
|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
|
| 06.04.2022, 16:45 [ТС] | |
|
0
|
|
|
фрилансер
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
|
||||
| 06.04.2022, 16:52 | ||||
|
0
|
||||
|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
|
| 06.04.2022, 16:55 [ТС] | |
|
0
|
|
|
фрилансер
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
|
|
| 06.04.2022, 17:00 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
|
||
| 06.04.2022, 17:06 [ТС] | ||
|
Кстати, почему-то некорректно работает std::stod? Через раз отбрасывает дробную часть, если вводить большую строку... Из-за чего это может быть?
0
|
||
| 06.04.2022, 17:06 | |
|
Помогаю со студенческими работами здесь
11
Преобразовать textBox->Text в double и обратно в string Перевод десятичного double в двоичный и обратно Перевод String->char и обратно
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|