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

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

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

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 18:35  [ТС]     Парсинг и валидация записи числа
И в другом месте, но в том же документе будет
"целое число ::= цифра цифра цифра цифра цифра цифра цифра цифра
цифра ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F". Имхо будет путаница.

Добавлено через 1 минуту
Цитата Сообщение от iifat Посмотреть сообщение
Положительные числа можно писать без + спереди?
Нельзя. Без знака пишется только ноль.
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)
 {
  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)
 {
  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;
 }
 re=0;
 for (de=1, i=L-1; i>e1; --i, de*=10)
 {
  c=Buffer[i];
  if ((c>='0')&&(c<='9'))
  {
   re+=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;
}
Добавлено через 14 секунд
Цитата Сообщение от iifat Посмотреть сообщение
у, сравни же в 82-й! Result ты начинаешь с нуля -- почему re = 1? И где de *= 10?
Исправил.

Добавлено через 3 минуты
Цитата Сообщение от iifat Посмотреть сообщение
Сообщение от taras atavin
Знак + числа в целом опускается
Осталось с ранней версии, исправил:
Все дробные числа пишутся в знаковом десятичном формате с плавающей запятой со знаковым порядком. Если число равно нолю, то: знак числа в целом опускается, а порядок равен нолю. Знак порядка опускается только, если порядок равен нолю. Знак числа опускается, только если оно равно нолю. Разделитель мантиссы и порядка – буква "E" верхнего регистра. Разделитель целой и дробной части мантиссы – точка.
.

Добавлено через 4 минуты
Цитата Сообщение от iifat Посмотреть сообщение
Ну обязана ж она быть!
А вот фиг. Нету. Забыл.
В нормальных языках оператора степени не бывает. Это связано с тем, что для отрицательных чисел действительная степень не определена.
 
Текущее время: 09:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru