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

Парсинг и валидация записи числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить число вхождений в строку подстроки "аба", вывести символы строки, не являющейся буквами или цифрами http://www.cyberforum.ru/cpp-beginners/thread752366.html
решить нужно в течении часа определить число вхождений в строку подстроки "аба" вывести символы строки не являющейся буквами или цифрами
C++ Для енама нельзя перегружать операторы? Для енама нельзя перегружать операторы? http://www.cyberforum.ru/cpp-beginners/thread752361.html
Ошибка компилятора C2360 C++
Здравствуйте,форумчане) Я тут переделываю загрузчик модели,чтобы мог не один начальный меш загрузить,а все,которые есть на сцене.В итоге пользуюсь контейнером vertex. Значит,если кто не знает,в...
C++ Итерация
Что такое итерационные вычисления? В чём их суть? В чём отличие методов:по определению с предусловием и с элементом с предусловием?
C++ Detours express 3.0 Компиляция http://www.cyberforum.ru/cpp-beginners/thread752318.html
Вообщем проблема с созданием готовых библиотек Скачать с офф сайта http://research.microsoft.com/en-us/projects/detours/ Не могу сделать готовые файлы для своего проекта... Прошу помощи ...
C++ Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается Возникло пару вопросов: #include <iostream> using namespace std; int main () { for (int i = 0; i<=10; i++) cout << i << '\n'; return 0; } 1. Этот код выводит числа от 0 до... подробнее

Показать сообщение отдельно
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 15:08  [ТС]
Точка - единственный, помимо места в файле, надёжный признак, различающий здесь две системы счисления, так как целое может быть и 000025E0, а ни 0x, ни h малое, ни 16 в скобках рядом с числом нет. А вот 00025.0E0 - это уже точно не шестнадцатеричное. Фатальная же гога как раз не так страшна, как избыточная всеядность.

Добавлено через 47 минут
А так:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
double ParseDouble(const
                   std::string     &Buffer,
                   TParseXSMResult &ResultCode)
{
 double        Result;
 double        d;
 size_t        re;
 size_t        de;
 size_t        i;
 size_t        L;
 size_t        p;
 size_t        e;
 size_t        e1;
 unsigned char c;
 ResultCode=TPXSMRNoError;
 Result=0.0;
 if (Buffer=="0.0E+0")
 {
  return 0.0;
 }
 L=Buffer.length();
 for (p=L, i=2; i<L; ++i)
 {
  c=Buffer[i];
  if (c=='.')
  {
   p=i;
   break;
  }
 }
 if (p==L)
 {
  default : ResultCode|=TPXSMRParseError;
  return Result;
 }
 for (e=L, i=p+2; i<L; ++i)
 {
  c=Buffer[i];
  if (c=='E')
  {
   p=i;
   break;
  }
 }
 if (e==L)
 {
  default : ResultCode|=TPXSMRParseError;
  return Result;
 }
 e1=e+1;
 if ((L-e)<3)
 {
  if (Buffer.substr(e, L-e)!="E0")
  {
   ResultCode|=TPXSMRParseError;
   return Result;
  }
 }
 else
 {
  c=Buffer[e1];
  if ((c!='-')&&(c!='+'))
  {
   ResultCode|=TPXSMRParseError;
   return Result;
  }
 }
 Result=0.0;
 for (d=0.1, i=p+1; i<e; ++i, d/=10.0)
 {
  c=Buffer[i];
  if ((c>='0')&&(c<='9'))
  {
   Result+=d*((double)(c-(unsigned char)'0'));
  }
  else
  {
   ResultCode|=TPXSMRParseError;
   return Result;
  }
 }
 for (d=1.0, i=p-1; i>0; ++i, d*=10.0)
 {
  c=Buffer[i];
  if ((c>='0')&&(c<='9'))
  {
   Result+=d*((double)(c-(unsigned char)'0'));
  }
  else
  {
   ResultCode|=TPXSMRParseError;
   return Result;
  }
 }
 c=Buffer[i];
 switch (c)
 {
  case '-': Result=-Result;
  break;
  case '+': Result=-Result;
  break;
  default : ResultCode|=TPXSMRParseError;
  return Result;
 }
 er=1;
 for (de=1, i=L-1; i>e1; --i)
 {
  c=Buffer[i];
  if ((c>='0')&&(c<='9'))
  {
   er+=de*((size_t)(c-(unsigned char)'0'));
  }
  else
  {
   ResultCode|=TPXSMRParseError;
   return Result;
  }
 }
 c=Buffer[e1];
 if (c=='-')
 {
  for (; re>0; --re)
  {
   Result/=10.0;
  }
 }
 else
 {
  for (; re>0; --re)
  {
   Result*=10.0;
  }
 }
 return Result;
}
? Есть ещё дыры в валидации? А лишние операции?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru