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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
#1

Моя реализация функции перевода STRING в DOUBLE - C++

22.12.2012, 11:35. Просмотров 1446. Ответов 21

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
#include <iostream>
#include <string>
 
using namespace std;
 
double str_to_double(string a);
 
int main() {
    string s = "7.86456456";
    cout << str_to_double(s);
}
 
double str_to_double(string a) {
    int s = 0;
 
    for(int i = 0; i < a.size(); ++i) {
        if(a[i] == '.') {++s;}
        if(s > 1 || a[0] == '.') {return 0;}
    }
 
    double num = 0;
    int tmp;
    bool anti = false;
 
    int dob = 0;
 
    for(int i = a.size() - 1; i >= 0 && a[i] != '.'; --i) {++dob;}
 
    double l = 1;
 
    if(s == 0) {l = 1;}
    else {for(int i = 0; i < dob; ++i, l /= 10);}
 
    for(int i = a.size() - 1; i >= 0; --i, l *= 10) {
        if(a[i] == '0') {tmp = 0;}
 
        else if(i == 0 && a[i] == '-') {anti = true; break;}
 
        else if(a[i] >= '0' && a[i] <= '9') {tmp = a[i] - '0';}
        else if(a[i] == '.') {l /= 10; continue;}
 
        else {
                return 0;
        }
 
        num += (tmp * l);
    }
 
    if(anti == true) {return -num;}
    else {return num;}
}
Самостоятельно написал функцию перевода string в double
P.S. Пишите предложения по улучшению этой функции

Добавлено через 5 минут
Вверх

Добавлено через 7 минут
Вверх
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Моя реализация функции перевода STRING в DOUBLE (C++):

Моя реализация функции перевода string в int - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int str_to_int(string a); int main() { string s =...

Какая-нибудь реализация функции void Fun (double in, double *out) - C++
Подскажите, пожалуйста, какую-нибудь любую реализацию прототипа функции: void Fun (double in, double *out)

Вывести long double число без перевода в double - C++
Надо вывести long double число без перевода в double. Пишу: printf(&quot;%Lf&quot;,S); и выводится неверно. Компилятор -- MinGW, та же фишка на...

Есть ли какие то стандартные функции преобразования double в string? - C++
В проекте необходимы функции, для преобразование double в string и наоборот. Первое получилось очень даже просто static double...

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

double to string - C++
Задание 11 главы 7 про массивы и строки Лафоре: перевести число double в строку и отформатировать. Вроде бы не сложно, но не непонятно с...

21
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.12.2012, 11:48 #2
-3.4423e+452 переваривает? Денормализованные числа? Точность представления?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 11:51  [ТС] #3
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
-3.4423e+452 переваривает? Денормализованные числа? Точность представления?
Все работает
0
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
22.12.2012, 12:03 #4
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Все работает
Да ладно?
C++
1
2
3
4
5
6
int main() {
    std::string s = "-10e2";
    double n = -10e2;
    cout << n << " " << str_to_double(s) << endl;
    return 0;
}
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 12:19  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
int main() {
* * std::string s = "-10e2";
* * double n = -10e2;
* * cout << n << " " << str_to_double(s) << endl;
* * return 0;
}
Так нет

Добавлено через 8 минут
Вверх
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.12.2012, 12:27 #6
sovaz1997, кто Вас научил так форматировать код? Да и комментариев добавте. Тогда люди почитают.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 12:29  [ТС] #7
Цитата Сообщение от go Посмотреть сообщение
sovaz1997, кто Вас научил так форматировать код?
В смысле?
0
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
22.12.2012, 13:32 #8
Цитата Сообщение от sovaz1997 Посмотреть сообщение
В смысле?
C++
1
2
3
if(a[i] == '0') {tmp = 0;}
 
else if(i == 0 && a[i] == '-') {anti = true; break;}
=>
C++
1
2
3
4
5
6
if (a[i] == '0') {
    tmp = 0;
} else if (i == 0 && a[i] == '-') {
    anti = true;
    break;
}
Хотя бы так. Про расположение открывающей фигурной скобки уж не буду холиварить.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 13:34  [ТС] #9
0x10, когда 1 строчка, так лучше писать - меньше места и читабельно
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 14:06 #10
Цитата Сообщение от sovaz1997 Посмотреть сообщение
0x10, когда 1 строчка, так лучше писать - меньше места и читабельно
кому это читабельно может быть?
0
0x10
2465 / 1637 / 241
Регистрация: 24.11.2012
Сообщений: 4,041
22.12.2012, 14:11 #11
Цитата Сообщение от Nixy Посмотреть сообщение
кому это читабельно может быть?
Кому-то, возможно, и читабельно. Но потом к проекту подключается второй программист, который привык к другому оформлению и начинает писать по-своему. И хотя разработчиков всего двое, в коде уже начинается бардак.

Короче, мораль для ТС: выбрать какие-нибудь стандарты кодирования и педантично придерживаться их.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
22.12.2012, 14:13 #12
Цитата Сообщение от sovaz1997 Посмотреть сообщение
0x10, когда 1 строчка, так лучше писать - меньше места и читабельно
Согласен
C++
1
2
3
#include <iostream>
#include <string>
using namespace std; double str_to_double(string a); int main() { string s = "7.86456456"; cout << str_to_double(s); } double str_to_double(string a) { int s = 0; for(int i = 0; i < a.size(); ++i) { if(a[i] == '.') {++s;} if(s > 1 || a[0] == '.') {return 0;} } double num = 0; int tmp; bool anti = false; int dob = 0; for(int i = a.size() - 1; i >= 0 && a[i] != '.'; --i) {++dob;} double l = 1; if(s == 0) {l = 1;} else {for(int i = 0; i < dob; ++i, l /= 10);} for(int i = a.size() - 1; i >= 0; --i, l *= 10) { if(a[i] == '0') {tmp = 0;} else if(i == 0 && a[i] == '-') {anti = true; break;} else if(a[i] >= '0' && a[i] <= '9') {tmp = a[i] - '0';} else if(a[i] == '.') {l /= 10; continue;} else { return 0; } num += (tmp * l); } if(anti == true) {return -num;} else {return num;} }
1
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
22.12.2012, 14:15  [ТС] #13
Цитата Сообщение от soon Посмотреть сообщение
Согласен
А говорю дело, а он тут оффтопит...
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.12.2012, 14:45 #14
Цитата Сообщение от sovaz1997 Посмотреть сообщение
А говорю дело, а он тут оффтопит...
какое дело? есть стандарт, его следует придерживатся, а не делать как левой ноге удобно

Добавлено через 4 минуты
Неуверен что оффициальный но вполне доходчивый стандарт
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.12.2012, 14:45 #15

Не по теме:

Цитата Сообщение от soon Посмотреть сообщение
Согласен
C++
1
2
3
#include <iostream>
#include <string>
using namespace std; double str_to_double(string a); int main() { string s = "7.86456456"; cout << str_to_double(s); } double str_to_double(string a) { int s = 0; for(int i = 0; i < a.size(); ++i) { if(a[i] == '.') {++s;} if(s > 1 || a[0] == '.') {return 0;} } double num = 0; int tmp; bool anti = false; int dob = 0; for(int i = a.size() - 1; i >= 0 && a[i] != '.'; --i) {++dob;} double l = 1; if(s == 0) {l = 1;} else {for(int i = 0; i < dob; ++i, l /= 10);} for(int i = a.size() - 1; i >= 0; --i, l *= 10) { if(a[i] == '0') {tmp = 0;} else if(i == 0 && a[i] == '-') {anti = true; break;} else if(a[i] >= '0' && a[i] <= '9') {tmp = a[i] - '0';} else if(a[i] == '.') {l /= 10; continue;} else { return 0; } num += (tmp * l); } if(anti == true) {return -num;} else {return num;} }
Ну что вы, по-моему, так ещё более читабельно.
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
# include  <iostream>
#   include <string>
#    define str string
#  define dbl double
# define cnt continue
double f(std::str
  a);int main(){std
   ::str s="7.864"
    "56456";std::cout
    <<f(s);}dbl f(
     std::str a){int s
   =0;for (int i=0;i<a.
   size(); ++i){if(a[i]
  =='.'){++s;}if(s>1||
 a[0]=='.'){return 0;
 }}double nm=0;int t;
  bool anti=false; int
   d=0;for(int i=a.size
    ()-1;i>=0&&a[i]!='.'
     ;--i){++d;}dbl l=
     1;if(s==0){l=1;}else
    {for(int i=0;i<d;++i
   ,l/=10);}for(int i=a
     .size()-1;i>=0;--i,l
      *=10){if(a[i]=='0'){
       t=0;}else if(i==0&&
         a[i]=='-'){anti=true
           ;break;}else if(a[i] 
          >='0'&&a[i]<='9'){t=
        a[i]-'0';}else if(a[
        i]=='.'){l/=10;cnt;}
       else{return 0;}nm+=(
      t*l);}if(anti==true)
{return -nm;}else{return nm;}}



Если серьёзно, то у подобного однострочного стиля главный недостаток: его приходится исправлять, если внезапно надо написать больше одной строки. То же касается необорачивания простых выражений в фигурные скобки.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 14:45
Привет! Вот еще темы с ответами:

Double в string - C++
Как преобразовать double в string. Пробовал так: ostringstream ost; ost &lt;&lt;setprecision(30) &lt;&lt; n; c = ost.str(); cout &lt;&lt;...

Double to String - C++
Здравствуйте.Какая функция переводит формат Double в Ansistring.Пробовал DoubleToStr(); не получается...

Std::string и символ перевода строки - C++
Вот такая простейшая программа: #include &lt;stdio.h&gt; #include &lt;string&gt; using namespace std; int main() { char t=&quot;asd\n&quot;; ...

Преобразовать double в string - C++
Подскажите как преобразовать double в string ?? Нашел что то похожее при помощи ostringstream , но там не совсем то.. ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
22.12.2012, 14:45
Ответ Создать тему
Опции темы

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