Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef char string_t[256];
- void string_to_double(double *d, const string_t s)
- {
- int flag_point = 257;
- int flag_minus = 1;
- int flag_e = 257;
- int i = 0, len = 0;
- long int rank = 1;
- if (s[i] == '-')
- {
- flag_minus = -1;
- i++;
- }
- while(s[len])
- {
- if (s[len] == 'e' && flag_e == 257)
- {
- flag_e = len;
- rank = pow(10, len-1);
- }
- else if (s[len] == 'e' && flag_e != 257)
- return;
- else if (s[len] == '.' && flag_point == 257)
- {
- flag_point = len;
- rank = powf(10, len-1);
- }
- else if (s[len] == '.' && flag_point != 257)
- return;
- else if (s[len] > '9' && s[len < '0'])
- return;
- else if (s[len] == '-' && len != 0 && len != flag_e+1)
- return;
- len++;
- }
- if (flag_point == 257 && flag_e == 257)
- rank = powf(10, len-1);
- if (flag_e != 257)
- {
- int k = 1;
- int first = 0;
- double second = 0;
- int e_minus = 1;
- while (s[i])
- {
- if (i < flag_e)
- {
- first += (s[i] - '0') * rank;
- rank /= 10;
- }
- else if (i == flag_e)
- {
- rank = 1;
- }
- else if (i == flag_e + 1 && s[i] == '-')
- {
- e_minus = -1;
- }
- else if (i > flag_e)
- {
- second += (double)(s[i] - '0') * rank;
- rank *= 10;
- }
- i++;
- }
- *d = flag_minus * first * pow(10, e_minus * second);
- }
- else
- {
- while (s[i])
- {
- if (i < flag_point)
- {
- *d += (s[i] - '0') * rank;
- rank /= 10;
- }
- else if (i == flag_point)
- rank = 10;
- else if (i > flag_point)
- {
- *d += (double)(s[i] - '0') / rank;
- rank *= 10;
- }
- i++;
- }
- *d *= flag_minus;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement