LINUX.ORG.RU

Преобразование числа в строку.


0

2

Как преобразовать число в строку в C? Какой функцией и в каком заголовочном файле эта функция описана? Заранее спасибо.

★★★

Последнее исправление: Dorif (всего исправлений: 1)

Исходя из того, что ты не сказал, какой язык - IntToStr(). Какой язык тоже не скажу.

Zhbert ★★★★★
()

Google: convert Integer to String in %LANGUAGENAME%

stevejobs ★★★★☆
()
Ответ на: комментарий от Dorif

Научись сначала писать хотя бы со стандартными библиотеками, а то всю жизнь будешь каждый элементарный чих по несколько дней на форуме обсуждать.

mikki
()
Ответ на: комментарий от mikki

Со стандартными уже всё написано. Теперь нужна реализация без них. И неужели попытка узнать побольше- такое уж и преступление?)))

Dorif ★★★
() автор топика
Ответ на: комментарий от anonymous

Вот бы ещё к этому коду комментарии были...

Dorif ★★★
() автор топика
Ответ на: комментарий от goose

> Он как бы не нужен, есть sprintf.

он как бы в 2-3 раза медленней, с такой логикой лучше вообще на С не писать

anonymous
()
Ответ на: комментарий от anonymous

Если это критично, то можно свой написать - это не сложно.

goose
()
Ответ на: комментарий от Dorif
char *uinttostr(unsigned int n) {
    int p;
    unsigned int n1;
    char *rv;

    p = 0;
    n1 = n;
    do {
        ++p;
        n1 /= 10;
    } while (n1 > 0);

    rv = malloc(p + 1);
    rv[p] = 0;
    do {
        --p;
        rv[p] = '0' + n % 10;
        n /= 10;
    } while (n > 0);
    return rv;    
}

Первый цикл можно заменить на десятичный логарифм, но, скорее всего, будет работать медленнее.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Перечитал Денниса Ритчи и Брайана Кернигана и нашёл там пример. Так как эта функция у меня будет работать с номером строки, который не может быть отрийательным по определению- немного переработал. Вот, что у меня получилось:

void itoa(unsigned int n, char s[])
 {
     int i;
     i = 0;
     do {       /* генерируем цифры в обратном порядке */
         s[i++] = n % 10 + '0';   /* берем следующую цифру */
     } while ((n /= 10) > 0);     /* удаляем */
     s[i] = '\0';
     reverse(s);
 }
 #include <string.h>
 /* reverse:  переворачиваем строку s на месте */
 void reverse(char s[])
 {
     int i, j;
     char c;
     for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
         c = s[i];
         s[i] = s[j];
         s[j] = c;
     }
 }

Dorif ★★★
() автор топика
Ответ на: комментарий от G-UNiX

Неееееее.))) Какие лабы в школе? И вообще: С в большинстве школ не проходят. cat пишу. Кстати, почему вот этот код:

char b[11],c[14]; 
                ++i; 
                itoa(i,b); 
                c=strcat("\n",strcat(b,": ")); 
                write(1,&c,strlen(c)); 
не работает?

Dorif ★★★
() автор топика
Ответ на: комментарий от Dorif

Таки будешь читать мануалы к функциям или нет?

The strcat() function appends the src string to the dest string, overwriting the null byte ('\0') at the end of dest, and then adds a terminating null byte. The strings may not overlap, and the dest string must have enough space for the result.

теперь найди сам у себя минимум 3 ошибки

mikki
()
Ответ на: комментарий от mikki
char b[11],c[15];  
                ++i;  
                itoa(i,b);  
                c=strcat("\n",strcat(b,": "));  
                write(1,&c,strlen(c));  

Места в строке хватает, но не компилится.

Dorif ★★★
() автор топика
Ответ на: комментарий от Dorif

Места в строке хватает

Давай посчитаем. Тебе нужно записать до 13 = 11 + 2 символов в первом случае в буфер b[11] и до 14 = 13 + 1 в буфер «\n» - в каком из них хватает места?

но не компилится

смотри что он пишет, люди не просто так же старались когда писали gcc

mikki
()
Ответ на: комментарий от mikki

> смотри что он пишет, люди не просто так же старались когда писали gcc

Учись парень, дело чувак говорит.

Drdiesel
()
Ответ на: комментарий от mikki

Ой, йа идиот, убейте меня...В с всё помещается, в b- нет. Спасибо.

Dorif ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.