Advertisement
Guest User

SplitDecimal.c

a guest
Sep 20th, 2013
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <math.h>
  5. #include "SplitDecimal.h"
  6.  
  7. char validateDecimalCharacters(char *string);
  8.  
  9. /*****************************************************************
  10. //
  11. // Function name: validDecimal
  12. //
  13. // DESCRIPTION: Determines if the given string contains a valid
  14. // floating point decimal number.
  15. //
  16. // Parameters: string (char *): The floating point decimal number as a string.
  17. //
  18. // Return values: TRUE = 1: If the given string is a valid decimal number.
  19. //
  20. // FALSE = 0: If the given string is not a valid decimal number.
  21. //
  22. //****************************************************************/
  23.  
  24. char validDecimal(char *string)
  25. {
  26. char valid = TRUE;
  27.  
  28. if (string == NULL )
  29. {
  30. valid = FALSE;
  31. }
  32. else
  33. {
  34. valid &= validateDecimalCharacters(string);
  35. }
  36. return valid;
  37. }
  38.  
  39. /*****************************************************************
  40. //
  41. // Function name: validateDecimalCharacters
  42. //
  43. // DESCRIPTION: Determines if the given string contains only
  44. // valid characters for a floating point decimal
  45. // number.
  46. //
  47. // The NULL checks must be handled BEFORE calling
  48. // this function.
  49. //
  50. // Parameters: string (char *): The string to be checked.
  51. //
  52. // Return values: TRUE = 1: The string only contains valid characters.
  53. //
  54. // FALSE = 0: If the string contains invalid characters.
  55. //
  56. //****************************************************************/
  57.  
  58. char validateDecimalCharacters(char *string)
  59. {
  60. int i;
  61. char decimalFound = FALSE;
  62. char valid = TRUE;
  63. int stringLength = strlen(string);
  64.  
  65. if (stringLength == 0 || (stringLength == 1 && string[0] == '.'))
  66. {
  67. valid = FALSE;
  68. }
  69. else
  70. {
  71. for (i = 0; string[i] != '\0'; i++)
  72. {
  73. if ((i == 0 && string[i] == '-') || isdigit(string[i]) || string[i] == '.')
  74. {
  75. if (string[i] == '.')
  76. {
  77. if (decimalFound)
  78. {
  79. valid = FALSE;
  80. break;
  81. }
  82. else
  83. {
  84. decimalFound = TRUE;
  85. }
  86. }
  87.  
  88. }
  89. else
  90. {
  91. valid = FALSE;
  92. break;
  93. }
  94. }
  95. }
  96. return valid;
  97. }
  98.  
  99. /*****************************************************************
  100. //
  101. // Function name: splitDecimal
  102. //
  103. // DESCRIPTION: Splits the floating point decimal number string
  104. // into its whole number and decimal portions and
  105. // returns them in a DecimalNumber struct.
  106. //
  107. // IMPORTANT: The string must be a valid decimal
  108. // number as determined by the
  109. // validDecimal function.
  110. //
  111. // Parameters: string (char *): The string to be split.
  112. //
  113. // Return values: A DecimalNumber struct containing the values of
  114. // the split string. If something went wrong,
  115. // the sign will be invalid (i.e. not 1 or -1).
  116. //
  117. //****************************************************************/
  118.  
  119. DecimalNumber splitDecimal(char *string)
  120. {
  121. int wholeNumber;
  122. char * stringCopy, *decimal;
  123. DecimalNumber split;
  124. if (string)
  125. {
  126. stringCopy = (char *) malloc(sizeof(char) * (strlen(string) + 1));
  127.  
  128. if (stringCopy != NULL )
  129. {
  130. strcpy(stringCopy, string);
  131.  
  132. decimal = strchr(stringCopy, '.');
  133.  
  134. if (decimal)
  135. {
  136. *decimal = '\0';
  137. decimal++;
  138. split.fractional = atoi(decimal);
  139. }
  140.  
  141. // No decimal point, so the decimal part is 0
  142. else
  143. {
  144. split.fractional = 0;
  145. }
  146.  
  147. wholeNumber = atoi(stringCopy);
  148. if (stringCopy[0] == '-')
  149. {
  150. split.integral = wholeNumber * -1;
  151. split.sign = -1;
  152. }
  153. else
  154. {
  155. split.integral = wholeNumber;
  156. split.sign = 1;
  157. }
  158.  
  159. free(stringCopy);
  160. }
  161. }
  162. else
  163. {
  164. split.sign = INVALID_DECIMAL_SIGN;
  165. }
  166.  
  167. return split;
  168. }
  169.  
  170. /*****************************************************************
  171. //
  172. // Function name: signToString
  173. //
  174. // DESCRIPTION: Converts the given value for a sign to a string.
  175. //
  176. // Parameters: sign (char): The sign value to be converted.
  177. //
  178. // Return values: A string representing the sign.
  179. //
  180. //****************************************************************/
  181. char *signToString(char sign)
  182. {
  183. char *signString;
  184. if (sign == 1)
  185. {
  186. signString = "+";
  187. }
  188. else if (sign == -1)
  189. {
  190. signString = "-";
  191. }
  192. else
  193. {
  194. signString = "BAD SIGN";
  195. }
  196. return signString;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement