fork download
  1. #include <stdio.h>
  2.  
  3. double myStrtod(const char *string)
  4. {
  5. double number = 0.0;
  6. double decimalPlace = 0.1;
  7. int sign = 1;
  8. int i = 0;
  9.  
  10. while (string[i] == ' ')
  11. {
  12. ++i;
  13. }
  14.  
  15. if (string[i] == '-')
  16. {
  17. sign = -1;
  18. ++i;
  19. }
  20. else if (string[i] == '+')
  21. {
  22. ++i;
  23. }
  24.  
  25. while (string[i] >= '0' &&
  26. string[i] <= '9')
  27. {
  28. number = number * 10 +
  29. (string[i] - '0');
  30.  
  31. ++i;
  32. }
  33.  
  34. if (string[i] == '.')
  35. {
  36. ++i;
  37.  
  38. while (string[i] >= '0' &&
  39. string[i] <= '9')
  40. {
  41. number +=
  42. (string[i] - '0') * decimalPlace;
  43.  
  44. decimalPlace *= 0.1;
  45. ++i;
  46. }
  47. }
  48.  
  49. return sign * number;
  50. }
  51.  
  52. long myStrtol(const char *string)
  53. {
  54. long number = 0;
  55. int sign = 1;
  56. int i = 0;
  57.  
  58. while (string[i] == ' ')
  59. {
  60. ++i;
  61. }
  62.  
  63. if (string[i] == '-')
  64. {
  65. sign = -1;
  66. ++i;
  67. }
  68. else if (string[i] == '+')
  69. {
  70. ++i;
  71. }
  72.  
  73. while (string[i] >= '0' &&
  74. string[i] <= '9')
  75. {
  76. number = number * 10 +
  77. (string[i] - '0');
  78.  
  79. ++i;
  80. }
  81.  
  82. return sign * number;
  83. }
  84.  
  85. unsigned long myStrtoul(const char *string)
  86. {
  87. unsigned long number = 0;
  88. int i = 0;
  89.  
  90. while (string[i] == ' ')
  91. {
  92. ++i;
  93. }
  94.  
  95. while (string[i] >= '0' &&
  96. string[i] <= '9')
  97. {
  98. number = number * 10 +
  99. (string[i] - '0');
  100.  
  101. ++i;
  102. }
  103.  
  104. return number;
  105. }
  106.  
  107. int main(void)
  108. {
  109. char doubleString[] = "-123.456";
  110. char longString[] = "-1234567";
  111. char unsignedString[] = "1234567";
  112.  
  113. printf("Double value = %.3f\n",
  114. myStrtod(doubleString));
  115.  
  116. printf("Long value = %ld\n",
  117. myStrtol(longString));
  118.  
  119. printf("Unsigned long value = %lu\n",
  120. myStrtoul(unsignedString));
  121.  
  122. return 0;
  123. }
Success #stdin #stdout 0s 5356KB
stdin
Standard input is empty
stdout
Double value = -123.456
Long value = -1234567
Unsigned long value = 1234567