Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38

Преобразования строки в число

27.02.2011, 23:06. Показов 2137. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Знаю, что подобная проблема здесь уже поднималась, однако решение ее я так и не нашел.
Суть задачи: ввести сумму используя стандартный класс string или массив строк и преобразовать в число типа 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
double mstold(string m);
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    string m1;
    cout << "Введите денежную сумму (используйте символ $): ";
    getline(cin, m1);
    double y ;
    y = mstold(m1);
    cout << '\x24' << y << endl;
    system("PAUSE");
    return 0;
}
//------------------------------------------------------------------------------------------------------
//
double mstold(string m)
{
    int x = m.find(',');
    while(x < m.size())
    {
        m.erase(x, 1);
        x = m.find(',');
    }
        m.erase(0,1);
    double y;
    y = stold(m);
    return y;
}
Проблема: отбрасывает значения после точки, хотя, как я понимаю, функция преобразования не должна этого делать.
Может быть кто-то сталкивался с подобной проблемой?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2011, 23:06
Ответы с готовыми решениями:

Напишите программу преобразования строки в число
Введите с клавиатуры число в буфер программы - строку С-стиля. Преобразуйте строку в целое, длинное целое и вещественное. Выведите числа...

Функцию преобразования char строки в действительное число
Подскажите,пожалуйста,как написать такую вот программку. Написать функцию, выполняющую преобразование строки в действительное число(со...

Самописная функция преобразования строки в число
Добрый день, товарищи Javer'ы! Получено задание реализовать собственный метод для преобразования строки (String) в число (int...

1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
28.02.2011, 00:09
Если вас устроит sscanf:

C++
1
2
3
4
5
6
7
8
9
10
11
string str;
double result;
bool read;
 
do
{
   cout << "> ";
   getline( cin, str );
   read = sscanf( str.c_str(), "%d", &result );
}
while( !read );
Удачи.

Добавлено через 37 минут
Вот это если ручками:

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
double StrToDouble( string::const_iterator beg, string::const_iterator end )
{       
    int secondPartLng = 0; //длина части после запятой
    double result = 0;     //финальное число
    string buffer;         //временный буфер
    string::const_iterator it = beg;
    
    //ищем разделитель целой и дробной части или конец фрагмента строки
    while( *it != '.' && *it != ',' && it != end )
       it++;
    
    copy( beg, it, back_inserter( buffer ) ); //копируем целую часть в буфер
    result = atoi( buffer.c_str() );          //и конвертируем её в число
    
    buffer.clear();     //очищаем буфер
    
    if( it != end )
       it++; //пропускаем разделитель
    else
       return result;
    
    //ищем конец дробной части (на случай наличия текста далее)
    string::const_iterator it2 = it;
    while( isdigit(*it2) && it2 != end )
       it2++;
    
    copy( it, it2, back_inserter( buffer ) ); // копируем дробную часть в буфер
    secondPartLng = buffer.length();          // запоминаем её длину
    
    // Расчёт:
    result += float( atoi( buffer.c_str() ) ) * ( 1 / pow( 10, secondPartLng ) );
    
    // Выполняется так:
    //  515.412
    //  412 (длина = 3)
    //  1 / 10^3 = 1/1000 = 0.001 // ^ - здесь оператор возведения в степень. В C++ этот оператор выполняет XOR - не путать!
    //  412 * 0.001 = 0.412
    //  515 + 0.412 = 515.412
    
    return result;
}
C++
1
2
3
string str;
getline( cin, str );
cout << setprecision(10) << StrToDouble( str.begin(), str.end() ) << endl;
Так же можно передать отдельный участок строки, если соответствующим образом установить итераторы.

P.S. Вы писали:
C++
1
double mstold(string m)
Я бы не рекомендовал передавать строку целиком, такие вещи лучше передавать по ссылке:
C++
1
double mstold(string &m)
Если не нужно менять строку, передайте с модификатором const.

Удачи.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2011, 00:09
Помогаю со студенческими работами здесь

Программа для преобразования строки в число и наоборот
нужна программа для преобразования строки в число и наоборот

Ошибка преобразования строки в вещественное число (EConvertError)
подскажите пожалуйста где у меня допущена ошибка unit Unit1; {$mode objfpc}{$H+} interface uses

Есть ли функция преобразования из строки в число в АСП?
После некоторых манипуляций с переменной как со строкой сервак прекращает распозновать ее как число.

Объясните пожалуйста работу процедуры преобразования строки в число
Inference proc push cx push si mov ah,0ah xor di,di mov dx,offset buff int 21h mov dl,0ah mov ah,02 int 21h

Ошибка преобразования строки в вещественное число (EConvertError) - Lazarus
подскажите пожалуйста где у меня допущена ошибка unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru