Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
#1

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

27.02.2011, 23:06. Просмотров 832. Ответов 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;
}
Проблема: отбрасывает значения после точки, хотя, как я понимаю, функция преобразования не должна этого делать.
Может быть кто-то сталкивался с подобной проблемой?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 23:06     Преобразования строки в число
Посмотрите здесь:

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

Почему при преобразования из float в double коверкается число? - C++
float fll=34.23; cout &lt;&lt; &quot; fll=&quot;&lt;&lt; fll; //Вот тут я ввожу double dub; dub = (double)fll;cout&lt;&lt;&quot; dub=&quot;&lt;&lt;dub; // А вот тут оно уже :...

Метод для преобразования строки - C++
У меня есть класс CTimeCycle когда я вызываю метод GetTime, я хочу чтобы он возвращал &quot;12:12:12&quot;, а он возвращает &quot;1&quot; помогите...

Оператор преобразования типа и его эквивалентные замены, поиск строки в текстовом файле , содержащей заданный - C++
Господа, был бы очень признателен если бы кто то помог ответить на вапросы http://cs616225.vk.me/v616225102/122f8/5kAaFEGoDn0.jpg

В динамической матрице целых чисел добавить строки после строки, содержащей простое число - C++
Помогите написать или хотя бы дайте пару подсказок В двумерном массиве целых чисел добавить строки после строки, содержащей простое...

Из строки в число - C++
Как можно преобразовать строку с цифрами в число отдельной функцией, не используя atoi, но пользуясь стандартными библиотеками?

из строки --> Число - C++
Есть строка &quot;10000111&quot; -&gt; в переменную int b.??????Плизззз

Преобразование строки в число - C++
Есть строка с цифрами разделенная точкой с запятой: 1, 2, 3 string s = &quot;1, 2, 3&quot;; Как мне из этой строки достать по очереди все цифры и...

Взять число из строки - C++
Пытаюсь взять последнее число из строки: string t; t = to_string(h); Но он берет его ascii код. В чем ошибка?

Извлечь число из строки - C++
Добрый день. Есть строка, например, вида: field001600.bin Из нее нужно извлечь число 1600 (т.е. без ведущих нулей). Подскажите, как...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
28.02.2011, 00:09     Преобразования строки в число #2
Если вас устроит 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.

Удачи.
Yandex
Объявления
28.02.2011, 00:09     Преобразования строки в число
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru