Convert one or more floating-point values into a single string : String Convert « String « C / ANSI-C

C / ANSI-C
1. assert.h
2. Console
3. ctype.h
4. Data Structure Algorithm
5. Data Type
6. Development
7. File
8. Function
9. Language Basics
10. Macro Preprocessor
11. Math
12. math.h
13. Memory
14. Pointer
15. setjmp.h
16. signal.h
17. Small Application
18. stdio.h
19. stdlib.h
20. String
21. string.h
22. Structure
23. time.h
24. wctype.h
Microsoft Office Word 2007 Tutorial
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
C / ANSI-C » String » String ConvertScreenshots 
Convert one or more floating-point values into a single string

/*
Beginning C, Third Edition
 By Ivor Horton
 ISBN: 1-59059-253-0
 Published: Apr 2004
 Publisher: apress

*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

char* to_string(int count, double first, ...);  /* Converts doubles to a string separated by commas */
char* fp_to_str(double x);                      /* Converts x to a string                           */
char* int_to_str(int n);                        /* Converts n to a string                           */ 

void main()
{
  char *str = NULL;                  /* Pointer to the string of values */
  double values[] 1.245, -3.56.75833.399, -1.02 };

  str = to_string(sizeof values/sizeof(double), values[0], values[1], values[2], values[3], values[4]);

  printf("The string of values is:\n%s\n", str);
 
  free(str);                         /* Free memory for string */
}

/************
 * Function to convert one or more floating-point values to a      *
 * string with the values separated by commas.                     *
 * This function allocates memory that must be freed by the caller *
 ************/
char* to_string(int count, double first, ...)
{
  va_list parg = NULL;          /* Pointer to variable argument   */
  char* str = NULL;             /* Pointer to the joined strings  */
  char *temp = NULL;            /* Temporary string pointer       */
  char *value_str = 0;          /* Pointer to a value string      */
  const char *separator = ",";  /* Separator in values string     */
  size_t separator_length = 0;  /* Length of separator string     */
  size_t length = 0;            /* Length of a string             */
  int i = 0;                    /* Loop counter                   */

  separator_length = strlen(separator);

  va_start(parg,first);         /* Initialize argument pointer */

  str = fp_to_str(first);       /* convert the first value     */

  /* Get the remaining arguments, convert them and append to the string */
  while(--count>0)
  {
    value_str = fp_to_str(va_arg(parg, double));    /* Get next argument */
    length = strlen(str+ strlen(value_str+ separator_length +1;
    temp = (char*)malloc(length)/* Allocate space for string with argument added */
    strcpy(temp, str);            /* Copy the old string         */
    free(str);                    /* Release old memory          */
    str = temp;                   /* Store new memory address    */
    temp = NULL;                  /* Reset pointer               */
    strcat(str,separator);        /* Append separator            */
    strcat(str,value_str);        /* Append value string         */
    free(value_str);              /* Release value string memory */
  }
  va_end(parg);                   /* Clean up arg pointer        */
  return str;
}

/********************
 * Converts the floating-point argument to a string.                       *
 * Result is with two decimal places.                                      *
 * Memory is allocated to hold the string and must be freed by the caller. *
 ********************/
char* fp_to_str(double x)
{
  char *str = NULL;                 /* Pointer to string representation     */
  char *integral = NULL;            /* Pointer to integral part as string   */
  char *fraction = NULL;            /* Pointer to fractional part as string */
  size_t length = 0;                /* Total string length required         */

  integral = int_to_str((int)x);    /* Get integral part as a string with a sign */

  /* Make x positive */
  if(x<0)
    x = -x;
  /* Get fractional part as a string */
  fraction = int_to_str((int)(100.0*(x+0.005-(int)x)));

  length = strlen(integral)+strlen(fraction)+2;  /* Total length including point and terminator */

  /* Fraction must be two digits so allow for it */
  if(strlen(fraction)<2)
    ++length;

  str = (char*)malloc(length);        /* Allocate memory for total */
  strcpy(str, integral);              /* Copy the integral part    */
  strcat(str, ".");                   /* Append decimal point      */

  if(strlen(fraction)<2)              /* If fraction less than two digits */
    strcat(str,"0");                  /* Append leading zero       */

  strcat(str, fraction);              /* Append fractional part    */

  /* Free up memory for parts as strings */
  free(integral);
  free(fraction);

  return str;
}

/********************
 * Converts the integer argument to a string.                              *
 * Memory is allocated to hold the string and must be freed by the caller. *
 ********************/
char* int_to_str(int n)
{
  char *str = NULL;                    /* pointer to the string */
  int length = 1;                      /* Number of characters in string(at least 1 for terminator */
  int temp = 0;
  int sign = 1;                        /* Indicates sign of n */

  /* Check for negative value */
  if(n<0)
  {
    sign = -1;
    n = -n;
    ++length;                          /* For the minus character */
  }

  /* Increment length by number of digits in n */
  temp = n;
  do
  {
    ++length;
  }
  while((temp /= 10)>0);

  str = (char*)malloc(length);        /* Allocate space required */

  if(sign<0)                          /* If it was negative      */
    str[0'-';                     /* Insert the minus sign   */

  str[--length'\0';               /* Add the terminator to the end */

  /* Add the digits starting from the end */
  do
  {
    str[--length'0'+n%10;
  }while((n /= 100);

  return str;
}

 

           
       
Related examples in the same category
1. Join array of strings into a single string
2.  Convert string to double-precision floating-point value
3. Change string to integer
4. Convert string entered to integer
5. Convert string entered to long
6.  Convert string to double: How to use atof: sines calculator
7.  Convert string to integer: atoi
8.  Convert string to long : atol
9.  Print formatted data to a string: how to use sprintf
10. Convert string to double: how to use atof
11.  Convert string to double-precision floating-point value: how to use strtod
12.  Convert string to long integer: how to use strtol
13.  Convert string to unsigned long integer: how to use strtoul
14. Convert string to int, double and long
15. Absolute value of long integer: how to use labs
w_w___w._j___av___a__2__s___._co__m_ | Contact Us
Copyright 2003 - 08 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.