Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2013, 19:48   #1
meloman96
Новичок
Джуниор
 
Регистрация: 04.10.2013
Сообщений: 2
Восклицание Строки в си

Форумчане, помогите.
Как решить данную задачу? Неделю сижу над кодом, ничего толкового не выходит.

Вот сама задача:
На входе строка с числом в десятичной форме. Распознать строку в переменную типа int. На выходе строки с введенным числом в двоичной, восьмиричной и шестнадцатиричной форме printf("%s",char *).

Язык Си, Среда visual 2012
meloman96 вне форума Ответить с цитированием
Старый 04.10.2013, 20:45   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Есть ф-ция - int atoi(char*)
Igor95 вне форума Ответить с цитированием
Старый 04.10.2013, 21:29   #3
meloman96
Новичок
Джуниор
 
Регистрация: 04.10.2013
Сообщений: 2
По умолчанию

запрещается использовать функции atoi/atof
meloman96 вне форума Ответить с цитированием
Старый 05.10.2013, 07:36   #4
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>
int   convi(const char* s);
char* iconv(char* s, int n, int r);


int  main(void) {
   char buf[33];

   int n = convi(" 2012 year");

   printf("dec: %d\n", n);
   printf("bin: %s\n", iconv(buf, n, 2));
   printf("oct: %s\n", iconv(buf, n, 8));
   printf("hex: %s\n", iconv(buf, n, 16));
   return 0;
}



// строка в число
int convi(const char* s) {
   int n = 0, i = 1;

   if(! *s)
         return 0;

   while(*s && !(*s >= '0' && *s <= '9'))
       ++s;

   if(*(s - 1) == '-')
       i = -i;

   while(*s && (*s >= '0' && *s <= '9')) {
       n *= 10;
       n += (int)(*s++ - '0');
   }
   return n * i;
}




// 10-число в 2, 8, 16
char* iconv(char* s, int n, int r) {
   char c, *p, *t = s;
   size_t i;

   const char ts[] = {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'A', 'B', 'C', 'D', 'E', 'F'
   };

   for(i = (size_t)n; i != 0; i /= r)
       *s++ = ts[i % r];
	
   if(s == t)
       *s++ = '0';
   *s = '\0';	

   for(--s, p = t; s > p; --s, ++p) {
       c  = *p;
       *p = *s;
       *s = c;
   }
   return t;
}
Пример работы кода
Nuklon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10