天天看點

自定義itoa函數

/* A utility function to reverse a string  */
void reverse(char str[], int length) 
{ 
    int start = 0; 
    int end = length -1; 
    while (start < end) 
    {
        swap((str+start), (str+end)); 
        start++; 
        end--; 
    } 
}

void swap(char *a, char *b)
{
        char t;
        t = *a;
        *a = *b;
        *b = t;
}     //标準的交換兩個數的函數

char* itoa(int num, char* str, int base) 
{
    int i = 0; 
    bool isNegative = false; 
  
    /* Handle 0 explicitely, otherwise empty string is printed for 0 */
    if (num == 0) 
    { 
        str[i++] = '0'; 
        str[i] = '\0'; 
        return str; 
    } 
  
    // In standard itoa(), negative numbers are handled only with  
    // base 10. Otherwise numbers are considered unsigned. 
    if (num < 0 && base == 10) 
    {
        isNegative = true; 
        num = -num; 
    } 
  
    // Process individual digits 
    while (num != 0) 
    { 
        int rem = num % base; 
        str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0'; 
        num = num/base; 
    } 
  
    // If number is negative, append '-' 
    if (isNegative) 
        str[i++] = '-'; 
  
    str[i] = '\0'; // Append string terminator 
  
    // Reverse the string 
    reverse(str, i); 
  
    return str; 
}
           
//main.c
#include <stdio.h>
...
char str[100];
int i = 10;
int num = 1567;
itoa(num, str, i);//傳回字元串“1567” 

for(int i = 0; str[i] != '0/'; i++)
   printf("%s", str[i])