C/Data Type/Int Convert
Содержание
A function to return a string representation of an integer
/*
Beginning C, Third Edition
By Ivor Horton
ISBN: 1-59059-253-0
Published: Apr 2004
Publisher: apress
*/
#include <stdio.h>
/* Convert an integer to a string */
/* Caller must allocate string array */
/* Function returns the string to allow */
/* Use of the function in an expression. */
char* itoa(int n, char str[])
{
int i = 0; /* Loop counter */
int negative = 0; /* Indicate negative integer */
int length = 0; /* Length of string */
int temp = 0; /* Temporary storage */
if(negative = (n<0)) /* Is it negative? */
n = -n; /* make it positive */
/* Generate digit characters in reverse order */
do
{
str[i++] = "0"+n%10; /* Create a rightmost digit */
n /= 10; /* Remove the digit */
}while(n>0); /* Go again if there"s more digits */
if(negative) /* If it was negative */
str[i++] = "-"; /* Append minus */
str[i] = "\0"; /* Append terminator */
length = i; /* Save the length */
/* Now reverse the string in place */
/* by switching first and last, */
/* second and last but one, etc */
for(i = 0 ; i<length/2 ;i++)
{
temp = str[i];
str[i] = str[length-i-1];
str[length-i-1] = temp;
}
return str; /* Return the string */
}
void main()
{
char str[15]; /* Stores string representation of integer */
long testdata[] = { 30L, -98L, 0L, -1L, 999L, -12345L};
int i = 0; /* Loop control variable */
for (i = 0 ; i< sizeof testdata/sizeof(long) ; i++)
printf("Integer value is %d, string is %s\n", testdata[i], itoa(testdata[i],str));
}
A function to return a string representation of an integer with a given width
/*
Beginning C, Third Edition
By Ivor Horton
ISBN: 1-59059-253-0
Published: Apr 2004
Publisher: apress
*/
#include <stdio.h>
/* Convert an integer to a string with a fixed width. */
/* if the widh is too small, the minimum width is assumed. */
char* itoa(int n, char str[], int width)
{
int i = 0; /* Loop counter */
int j = 0; /* Loop counter */
int negative = 0; /* Indicate negative integer */
int length = 0; /* Length of string */
int temp = 0; /* Temporary storage */
if(negative = (n<0)) /* Is it negative? */
n = -n; /* make it positive */
/* Generate digit characters in reverse order */
do
{
str[i++] = "0"+n%10; /* Create a rightmost digit */
n /= 10; /* Remove the digit */
}while(n>0); /* Go again if there"s more digits */
if(negative) /* If it was negative */
str[i++] = "-"; /* Append minus */
str[i] = "\0"; /* Append terminator */
length = i; /* Save the length */
/* Now reverse the string in place */
/* by switching first and last, */
/* second and last but one, etc */
for(i = 0 ; i<length/2 ;i++)
{
temp = str[i];
str[i] = str[length-i-1];
str[length-i-1] = temp;
}
/* Shift the string to the right and insert blanks */
if(width>length)
{
for(i=length, j = width ; i>= 0 ; i--, j--)
str[j] = str[i];
for(i = 0 ; i<width-length ; i++)
str[i] = " ";
}
return str; /* Return the string */
}
void main()
{
char str[15]; /* Stores string representation of integer */
long testdata[] = { 30L, -98L, 0L, -1L, 999L, -12345L};
int i = 0; /* Loop control variable */
for (i = 0 ; i< sizeof testdata/sizeof(long) ; i++)
printf("Integer value is %10d, string is %s\n", testdata[i], itoa(testdata[i],str, 14));
}
Convert an integer to words
/*
Beginning C, Third Edition
By Ivor Horton
ISBN: 1-59059-253-0
Published: Apr 2004
Publisher: apress
*/
/* */
#include <stdio.h>
#include <string.h>
void main()
{
char *unit_words[] = {"zero", "one","two","three","four","five","six","seven","eight","nine"};
char *teen_words[] = {"ten", "eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
char *ten_words[] = {"error", "error","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
char hundred[] = " hundred";
char and[] = " and ";
char value_str[50] = "";
int value = 0; /* Integer to be converted */
int digits[] = {0,0,0}; /* Stores digits of value entered */
int i = 0;
printf("Enter an integer less than 1000: ");
scanf("%d",&value);
if(value>=1000)
value =999;
else if(value<1)
value = 1;
while(value>0)
{
digits[i++] = value%10;
value /= 10;
}
if(digits[2] > 0)
{
strcat(strcat(value_str,unit_words[digits[2]]), hundred);
if(digits[1] >0 || digits[0] > 0)
strcat(value_str, and);
}
if(digits[1] > 0)
{
if(digits[1] == 1)
strcat(value_str,teen_words[digits[0]]);
else
{
strcat(value_str,ten_words[digits[1]]);
if(digits[0] > 0)
strcat(strcat(value_str, " "), unit_words[digits[0]]);
}
}
else
if(digits[0] > 0)
strcat(value_str, unit_words[digits[0]]);
printf("\n%s\n", value_str);
}
Convert integer to string: how to use itoa
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char str[33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,str,10);
printf ("decimal: %s\n", str);
itoa (i, str, 16);
printf ("hexadecimal: %s\n", str);
itoa (i, str, 2);
printf ("binary: %s\n", str);
return 0;
}