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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как сделать так, чтобы программа понимала русские буквы? http://www.cyberforum.ru/cpp-beginners/thread337779.html
И если знаете как убрать этот огромный массив символов "char mass2" на chr виснет все... Так вот код программы. Мне нужно чтобы она выводила статистику по русским символам правильно... а то выводит не то совсем. Подскажите пожалуйста. #include <iostream> // подключаем библиотеку ввода, вывода #include <conio.h> // для задержки экрана #include <locale.h>
C++ Интернет и С++ Здраствуйте. Посоветуйте книги, статьи по сетевому программированию на С++, хочу понять саму систему, как там все должно быть устроено, т. е. что бы обьяснялся не сам инструментарий. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread337748.html
C++ Вывод информации о *.bmp на чистом C++
Собственно вот: #include <iostream> #include <fstream> #include <cmath> using namespace std; int main(int argc, char *argv) { char ch;
C++ шаблоны
возник вопрос, а как можно сделать так, чтобы различные экземпляры шаблона класса вели себя по разному в зависимости от того, что было передано в аргументах - класс или некласс. Приведу пример template<typename T> class Class { private: template<typename C> bool func(C const& x, C const& y, int C::*) { return true; }
C++ [BMP] HEX (из HEX-редактора) в DEC http://www.cyberforum.ru/cpp-beginners/thread337689.html
Имеется файл *.bmp (который нельзя вложить в сообщение). В самом файле есть его свойства (размер и т.д.). Как их перевести из HEX в DEC? Размер - ce 6b 0e 00 (байт) - 922 КБ (945,102 байт) X x Y - c2 01 00 00 x bb 02 00 00 (пикселей) - 450 x 699 пикселей В HEX значения взяты из самого файла, а в DEC - из "ПКМ - Свойства". Только вот я не могу понять как переводить, ведь 0xce6b0e00 = 3 463...
C++ Создание SAVE файла. Запись и чтение. Доброго времени суток! Хочу обратиться за мудрым советом к профессионалам. Мне необходимо реализовать в своем приложении создание SAVE файла. Запись и чтение из него. У меня есть массив объектов. Скорее всего, количество объектов не будет больше ста. У каждого объекта есть шесть параметров - числа типа double, один параметр, который может принимать одно из четырех целочисленных значений (1, 3,... подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
31.07.2011, 16:21     Преобразование строки в 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
56
57
58
59
60
61
62
63
#include <iostream>
#include <iomanip>
using namespace std;
 
 
double atof(const char *nPtr)
{
    int factor=1;//множитель (при поиске целого)/делитель(при поиске числа после точки)
    bool point=0;//флаг. True если точка найдена в числе
    int end=0; //последняя цифра в целой части числа (до точки)
    double result=0;
 
    //поиск точки в строке
    for (int i=0;nPtr[i]!='\0';i++)
    {
        end=i;
        if (nPtr[i]=='.')
        {
            point=i;
            end=i-1;
            break;
        }
    }
 
    //перевод числа до точки в double
    for (int i=end;i>=0;i--,factor*=10)
    {
        //если это число
        if (nPtr[i]<=57 && nPtr[i]>=48)
        {
            result+=(nPtr[i]-48)*factor;
        }
        else
         return 0;
    }
 
    //вывести результат преобразования числа до точки
    cout<<"temp result: "<<result<<endl;
 
    //поиск числа после точки
    factor=10;
    if (point && nPtr[point+1]!='\0')
     for (int i=point+1;nPtr[i]!='\0';i++,factor*=10)
     {
        //если это число
        if (nPtr[i]<=57 && nPtr[i]>=48)
        {
            result+=static_cast<double>(nPtr[i]-48)/static_cast<double>(factor);
        }
 
        //если встречается символ не являющийся цифрой - вернуть текущий результат
        else
         return result;
     }
    return result;
}
 
 
int main()
{
    char a[]="123.";
    cout<<atof(a);
}
Проблема возникла с вычислением числа после точки, точнее вычисляется оно не правильно и мне не понятно почему. Вот например в данном примере где у меня число 123, точка здесь есть, но после неё ничего нет значит условие
C++
1
 if (point && nPtr[point+1]!='\0')
не должно сработать так как сл. символ после точки (end указывает на точку) у меня какраз символ конца строки же, хотя на деле это условие выполняется (печать результата внутри функции до выполнения этого условию показывает это) но почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru