Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 03.03.2016
Сообщений: 86

Массивы и строки: реализовать метод ldtoms() для преобразования числа типа long double в денежную строку

06.08.2018, 22:18. Показов 2581. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вернемся к обсуждению денежных строк из упражнения 6. Напишите ме-
тод ldtoms() для преобразования числа типа long double в денежную строку,
представляющую это число. Для начала вам нужно проверить, что значе-
ние long double не очень большое. Мы предполагаем, что вы не будете пы-
таться преобразовать число, больше чем 9 999 999 999 999 990.00. Затем
преобразуем long double в строку (без знака доллара и запятых), храня-
щуюся в памяти, используя объект ostrstream, как рассматривалось ранее
в этой главе. Получившаяся отформатированная строка может быть поме-
щена в буфер, называющийся ustring.
Затем вам нужно будет создать другую строку, начинающуюся со знака
доллара, далее копируем цифру за цифрой из строки ustring, начиная сле-
ва и вставляя запятые через каждые три цифры. Также вам нужно подав-
лять нули в начале строки. Например, вы должны вывести $3 124.95, а не
$0 000 000 000 003 124.95. Не забудьте закончить строку нулевым симво-
лом '\0'.
Напишите функцию main() для тестирования этой функции путем много-
кратного ввода пользователем чисел типа long double и вывода результата
в виде денежной строки.

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
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
class Money {
        string mon1;
        string mon2;
        long double sum;
    public:
        void ldtoms() {
            stringstream conv;
            conv << sum;
            conv >> mon1;
        }
        void getMoney () {
            cout << "Введите сумму: " << endl;
            cin >> sum;
            if (sum > 9999999999999990.00)
            {
                cout << "\nОшибка! Попробуйте еще раз.";
                system("pause");
                exit(1);
            }
        }
        void strings () {
            string doll("$");
            mon2 = mon1;
            mon2 = doll + mon2;
            int ch = mon2.find('.');
            mon2.erase(ch, 1);
            reverse(mon2.begin(), mon2.end());
            mon2.insert(5, " ");
            mon2.insert(8, " ");
            mon2.insert(11, " ");
            mon2.insert(14, " ");
            mon2.insert(17, " ");
            mon2.insert(2, " ");
            reverse(mon2.begin(), mon2.end());
        }
        void diplay () const {
            cout << "\n" << mon2 << endl;
        }
};
int main()
{
    setlocale(LC_ALL,"");
    Money m;
    m.getMoney();
    m.ldtoms();
    m.strings();
    m.diplay();
    system("pause");
    return 0;
}
Подскажите, почему не правильно работает программа ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2018, 22:18
Ответы с готовыми решениями:

Какой спецификатор использовать для корректного вывода типа данных double и long double
Подскажите пожалуйста, какой спецификатор использовать для корректного вывода типа данных double и long double. printf(&quot; float...

Ошибки преобразования числа типа Double в String
Доброго времени суток, форумчане. У меня серьезная проблема с преобразованием , взгляните: begin begin var i: Double; ...

Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s[]) ) и тестирующую
Написать функцию для перевода переменной типа long в символьную строку в шестнадцатиричном представлении ( ltoah( long num, char s) ) и...

8
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
06.08.2018, 23:05
Цитата Сообщение от Леонид1300 Посмотреть сообщение
Подскажите, почему не правильно работает программа ?
Пытаетесь в 33-39 строках вставить пробел за пределы строки, а так же пытаетесь в 31й строке удалить несуществующий элемент.
0
3 / 3 / 1
Регистрация: 03.03.2016
Сообщений: 86
07.08.2018, 02:09  [ТС]
почему не существующий в 31ой, я сам должен ввести точку, о он должен поставить пробелы. но что-то идет не так, не пойму что именно.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
07.08.2018, 02:26
Леонид1300, потому что у вас поток не настроен в 13й строке. Если копейки нулевые, точки не будет.

Исправьте 13ю строку на

C++
1
conv << fixed << setprecision(2) << sum; // #include <iomanip>
0
3 / 3 / 1
Регистрация: 03.03.2016
Сообщений: 86
07.08.2018, 02:34  [ТС]
при компиляции вводишь число, выходит мусор в консоли, такая-же фигня и осталась )
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
07.08.2018, 02:36
Леонид1300, ну так правьте строки 33-38, я уже писал. Можете их вообще удалить, чтобы убедиться, что без них результат выдается нормально, за исключением разделителей.
0
3 / 3 / 1
Регистрация: 03.03.2016
Сообщений: 86
07.08.2018, 02:45  [ТС]
вроде получилось, но вот вопрос, я ставлю вместо
C++
1
mon2.insert(5, " ");
вот так
C++
1
mon2.insert(1, " ");
, возможно ли, чтобы он не с конца ставил пробел, а сначало. Допустим сейчас если я ввожу 123456, то он выведет мне $1234560 0. а я хочу чтобы вышло вот так, $1 23456... и т.д
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
07.08.2018, 03:00
Леонид1300, замените строки 32-39 на

C++
1
2
for (int i = mon2.size() - 6; i > 1; i -= 3)
    mon2.insert(i, " ");
Добавлено через 5 минут
Леонид1300, и да, строки 30-31 вам тоже не нужны. Удалите их, если еще не сделали это.
1
3 / 3 / 1
Регистрация: 03.03.2016
Сообщений: 86
07.08.2018, 03:14  [ТС]
Спасибо за помощь. Все в принципе работает как я и хотел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2018, 03:14
Помогаю со студенческими работами здесь

Есть ли аналоги для log и log10 с параметром типа long double?
Есть ли аналоги для log и log10 с параметром типа long double?

Реализовать метод multiply() - умножение на произвольное дробное число типа double
Поле first-дробное число,целая часть числа; поле second-положительное дробное число,дробная часть числа.реализовать метод...

Обеспечить операторы преобразования матрицы к типу double[] и наоборот - от типа double[] к матрице
Здравствуйте. Выполняю лабораторную работу, по заданию которой необходимо создать класс &quot;Матрица&quot; со всякими там...

Функция для преобразования double в строку символов.
Написать функцию для преобразования переменной типа double в строку символов с заданной точностью представления ( dtoa( double num, int...

Конструктор,метод вывода на экран Display, метод для преобразования в строку toString в Delphi
Здравствуйте программисты!!! Мне в университете задали написать класс, а в этом классе использовать конструктор, метод вывода на экран...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru