C/String/String Convert

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Absolute value of long integer: how to use labs

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  int n, m;
  n = labs( 65537 );
  m = labs( -110000 );
  printf ("n = %d \n", n);
  printf ("m = %d\n", m);
  return 0;
}


Change string to integer

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
  char num[80];
  gets(num);
  printf("%d", abs( atoi( num ) ) ); 
  return 0;
}


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.5, 6.758, 33.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 /= 10) > 0);
  return str;
}


Convert string entered to integer

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
  char num1[80], num2[80];
  printf("Enter first: ");
  
  gets(num1);
  
  printf("Enter second: ");
  
  gets(num2);
  
  printf("The sum is: %d.", atoi(num1) + atoi(num2));
  return 0;
}


Convert string entered to long

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
  char num1[80], num2[80];
  printf("Enter first: ");
  gets(num1);
  
  printf("Enter second: ");
  gets(num2);
  
  printf("The sum is: %ld.", atol(num1)+atol(num2));
  return 0;
}


Convert string to double: how to use atof

#include <stdio.h>
#include <math.h>
int main ()
{
  double n, m;
  double pi = 3.1415926535;
  char str[256];
  printf ( "Enter degrees: " );
  gets ( str );
  n = atof ( str );
  m = sin (n * pi / 180);
  printf ( "sine of %f degrees = %f\n" , n, m );
  return 0;
}


Convert string to double: How to use atof: sines calculator

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
  double n, m;
  double pi=3.1415926535;
  char   str[256];
  printf ( "Enter degrees: " );
  gets ( str );
  n = atof ( str );
  m = sin ( n * pi / 180 );
  printf ( " sine of %f degrees = %f \n" , n, m );
  
  return 0;
}


Convert string to double-precision floating-point value

#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
int main(void)
{
  char *end, *start = "Value: 111.1111111";
  end = start;
  while( *start ) {
    printf("%f, ", strtod(start, &end));
    printf("Remainder: %s\n" ,end);
    start = end;
    
    /* move past the non-digits */
    
    while(!isdigit(*start) && *start) 
        start++;
  }
  return 0;
}


Convert string to double-precision floating-point value: how to use strtod

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  char str[256];
  char *p;
  double dbl;
  
  printf ("Enter a floating-point value: ");
  
  gets (str);
  
  dbl = strtod (str, &p);
  
  printf ("Value entered: %lf. Its square: %lf\n", dbl, dbl * dbl);
  
  return 0;
}


Convert string to int, double and long

  
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int i;
  double d;
  long l;
  i = atoi("1");
  l = atol("11111111");
  d = atof("11111.11111");
  printf("%d %ld %f", i, l, d);
  return 0;
}


Convert string to integer: atoi

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  int i;
  char str[256];
  printf ("Enter a number: ");
  
  gets ( str );
  
  i = atoi ( str );
  
  printf ("i =  %d, its double = %d", i, i * 2 );
  
  return 0;
}


Convert string to long : atol

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  int i;
  char str[256];
  printf ("Enter a long number: ");
  gets ( str );
  i = atol ( str );
  printf ("i = %d, its double = %d", i, i * 2 );
 
  return 0;
}


Convert string to long integer: how to use strtol

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  char str[256];
  char *p;
  long l;
  
  printf ("Enter an long value: ");
  
  gets (str);
  l = strtol (str, &p, 0);
  
  printf ("Value entered: %ld. Its double: %ld\n", l, l * 2);
  
  return 0;
}


Convert string to unsigned long integer: how to use strtoul

#include <stdio.h>
#include <stdlib.h>
int main ()
{
  char str[256];
  char *p;
  unsigned long ul;
  
  printf ("Enter an integer value: ");
  
  gets (str);
  
  ul = strtoul (str, &p, 0);
  
  printf ("Value entered: %lu. Its double: %lu\n", ul, ul * 2);
  
  return 0;
}


Join array of strings 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 <string.h>
#include <ctype.h>
#define MAX_STRINGS 100                         /* Maximum string count                        */
#define BUFFER_SIZE 50                          /* Initial input buffer size                   */
char* join_strings(char *strings[], int count); /* Joins array of strings into a single string */
char* read_string();                            /* Reads a string from the keyboard            */
void main()
{
  char *pStrings[MAX_STRINGS];       /* Array of pointers to strings */
  char *joined_strings = NULL;       /* Pointer to the joined string */
  int count = 0;                     /* Number of strings entered    */
  char answer = "y";                 /* Confirms more input          */
  char terminator = "*";             /* Terminator for string entry  */
  int i = 0;
  /* Read the strings */
  while(count<MAX_STRINGS && tolower(answer)=="y")
  {
    printf("Enter a string:\n");
    pStrings[count++] = read_string(terminator);
    printf("Do you want to enter another: ");
    scanf(" %c", &answer);
    fflush(stdin);                     /* Lose newline following character entry */
  }
  joined_strings = join_strings(pStrings, count); 
  printf("\nHere are the strings as a single string:\n%s\n", joined_strings);
  free(joined_strings);                /* Free memory for joined strings   */
  for(i = 0 ; i<count ; i++)           /* Free memory for original strings */
    free(pStrings[i]);
}
/************
 * Function to join an array of strings                            *
 * this function allocates memory that must be freed by the caller *
 ************/
char* join_strings(char *strings[], int count)
{
  char* str = NULL;             /* Pointer to the joined strings  */
  size_t total_length = 0;      /* Total length of joined strings */
  size_t length = 0;            /* Length of a string             */
  int i = 0;                    /* Loop counter                   */
  /* Find total length of joined strings */
  for(i = 0 ; i<count ; i++)
  {
    total_length += strlen(strings[i]);
    if(strings[i][strlen(strings[i])-1] != "\n")
      ++total_length; /* For newline to be added */
  }
  ++total_length;     /* For joined string terminator */
  str = (char*)malloc(total_length);  /* Allocate memory for joined strings */
  str[0] = "\0";                      /* Empty string we can append to      */
  /* Append all the strings */
  for(i = 0 ; i<count ; i++)
  {
    strcat(str, strings[i]);
    length = strlen(str);
    /* Check if we need to insert newline */
    if(str[length-1] != "\n")
    {
      str[length] = "\n";             /* Append a newline       */
      str[length+1] = "\0";           /* followed by terminator */
    }
  }
  return str;
}
/********************
 * Reads a string of any length.                                           *
 * The string is terminated by the chracter passed as the argument.        *
 * Memory is allocated to hold the string and must be freed by the caller. *
 ********************/
char* read_string(char terminator)
{
  char *buffer = NULL;            /* Pointer to the input buffer */
  int buffersize = BUFFER_SIZE;   /* Current buffer capacity     */
  int length = 0;                 /* String length               */
  char *temp = NULL;              /* Temporary buffer pointer    */
  int i = 0;                      /* Loop counter                */
  buffer = (char*)malloc(BUFFER_SIZE);  /* Initial buffer */
  /* Read the string character by character */
  for(;;)
  {
    /* Check for string terminator */ 
    if((buffer[length] = getchar()) == terminator)
      break;
    else
      ++length;
    /* Check for buffer overflow */
    if(length == buffersize)
    {
      buffersize += BUFFER_SIZE;          /* Increase buffer size */
      temp = (char*)malloc(buffersize);   /* Allocate new buffer  */
      /* Copy characters from old buffer to new */
      for(i = 0 ; i<length ; i++)
        temp[i] = buffer[i];
      free(buffer);                       /* Free memory for old buffer */
      buffer = temp;                      /* Store new buffer address   */
      temp = NULL;                        /* Rest temp pointer          */
    }
  }
  buffer[length] = "\0";                  /* Append string terminator                  */
  temp = (char*)malloc(length+1);         /* Allocate exact memory required for string */
  strcpy(temp, buffer);                   /* Copy the string       */
  free(buffer);                           /* Free the buffer memory */
  return temp;
}


Print formatted data to a string: how to use sprintf

#include <stdio.h>
int main ()
{
  char buffer [50];
  int n, a = 50, b = 37;
  
  n = sprintf (buffer, "%d plus %d is %d", a, b, a + b);
  
  printf ("[%s] is a %d chars string\n", buffer, n);
  
  return 0;
}