2013-04-29 3 views
0

Я хочу написать свою собственную функцию в C по разным причинам, которая преобразует int в строку десятичных знаков, как и sprintf.преобразовать int в строку с десятичными знаками

Пример:

int number = 254; 
    char string[10]; 
    sprintf(string, "%d", number); 

Строка должна выглядеть следующим образом после того, как функции я хочу написать:

[0] 2 
    [1] 5 
    [2] 4 
    [3] '\0' 

Просто чтобы прояснить еще дальше, я хочу, чтобы запрограммировать фактическое Перекодировка в межд к строке символов. Я не хочу использовать sprintf или itoa и т. Д., Чтобы это сделать. Я хочу знать, как это делается, и иметь возможность сами программировать и делать небольшие корректировки.

Дополнительные уточнения: Я не хочу использовать itoa или sprintf, но в значительной степени программирую их самостоятельно.

+0

Хотя это выглядит как C/C++, не могли бы вы пометить вопрос правильно для локальной сети guage используется? –

+0

Этот вопрос сильно зависит от языка. Вы имеете в виду C? – chepner

+0

Ах, забыл упомянуть язык, добавил его сейчас, и это C. – CMan

ответ

1
#include <stdio.h> 
#include <stdlib.h> 

int i2a(char *s, int n){ 
    div_t qr; 
    int pos; 

    if(n == 0) return 0; 

    qr = div(n, 10); 
    pos = i2a(s, qr.quot); 
    s[pos] = qr.rem + '0'; 
    return pos + 1; 
} 

char* my_itoa(char *output_buff, int num){ 
    char *p = output_buff; 
    if(num < 0){ 
     *p++ = '-'; 
     num *= -1; 
    } else if(num == 0) 
     *p++ = '0'; 
    p[i2a(p, num)]='\0'; 
    return output_buff; 
} 

int main(void){ 
    int number = -254; 
    char string[12]; 
    printf("%s", my_itoa(string, number)); 
    return 0; 
} 
+0

Спасибо. Я так понимаю, это может обрабатывать подписанные ints тоже? – CMan

+0

@CMan 'может обрабатывать подписанные int тоже?' Yes – BLUEPIXY

0
int number = 254; 
int back=0,i=0; 
char ch='\0'; 
char string[10]; 

for(i=0;(number/10)==0;i++){ 
    back=number%10; 
    ch=(back*pow(10,i)+48); 
    string[i]=ch; 
} 
  1. число делят на 10
  2. получить остальные (с%) остальное является цифра, которую вы хотите, начиная с правой
  3. отливать цифры на символ +48 (ASCII 0)
  4. добавить строку
Смежные вопросы