Записать строку заменив каждую из последовательностей ее значением в десятичной системе счислениям - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана строка содержащая текст и последовательности из 0 и 1 (двоичные числа). Записать строку заменив каждую из последовательностей ее значением в десятичной системе счислениям мне нужно прочитать и скопировать последовательности в отдельную строчку затем эту последовательность преобразовать в отдельной функции в десятичное число после чего передать на выход строчку и заместо прежней последовательности записать это число....вот а как записать в программе это

Решение задачи: «Записать строку заменив каждую из последовательностей ее значением в десятичной системе счислениям»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char str[256];
  7.   char res[256];
  8.   char number[16];
  9.  
  10.   int dec = 0;
  11.   int sequenceStarted = 0;
  12.   int numberStarted = 0;
  13.   int i = 0;
  14.   int j = 0;
  15.  
  16.   memset(str, 0, sizeof(str));
  17.   memset(res, 0, sizeof(res));
  18.  
  19.   strcpy(str, "n1 = 11010101, n2 = 11010100, n3 = 11110111!");
  20.  
  21.   for(i = 0; i < strlen(str); i++)
  22.   {
  23.     if ((str[i] == '0') || (str[i] == '1'))
  24.     {
  25.       sequenceStarted = 1;
  26.       numberStarted = 1;
  27.     }
  28.     else sequenceStarted = 0;
  29.  
  30.     if (!sequenceStarted)
  31.     {
  32.       if (numberStarted)
  33.       {
  34.         sprintf(number, "%d", dec);
  35.         strcat(res, number);
  36.  
  37.         numberStarted = 0;
  38.         dec = 0;
  39.         j = j + strlen(number);
  40.       }
  41.  
  42.       res[j] = str[i];
  43.       j++;
  44.     }
  45.     else
  46.     {
  47.       if (str[i] == '1') dec = dec * 2 + 1;
  48.       else if (str[i] == '0') dec = dec * 2;
  49.     }
  50.   }
  51.  
  52.   printf("Original string: '%s'\n", str);
  53.   printf("Composed string: '%s'\n", res);
  54.  
  55.   getchar();
  56.  
  57.   return 0;
  58. }

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h и string.h
  2. Объявляются и инициализируются переменные:
    • char str[256] - строка, которую необходимо преобразовать;
    • char res[256] - результирующая строка;
    • char number[16] - переменная для хранения числа.
  3. Объявляются и инициализируются следующие переменные:
    • int dec - десятичное число, результат преобразования;
    • int sequenceStarted - флаг начала последовательности чисел;
    • int numberStarted - флаг начала записи числа;
    • int i, j - индексы для обработки строки;
    • int memset(str, 0, sizeof(str)) - функция очистки памяти, обнуляющая все байты в строке.
  4. Копируется исходная строка в str.
  5. В цикле обрабатываются все символы исходной строки:
    • Если символ '0' или '1', то начинается последовательность чисел (sequenceStarted = 1);
    • Если символ не '0' или '1', то проверяется, была ли начата последовательность чисел (sequenceStarted = 0);
    • Если последовательность чисел была начата, то записывается предыдущее число (number) и сбрасываются флаги numberStarted и dec;
    • Если не была начата последовательность чисел, то добавляется текущий символ в результирующую строку (res).
    • Если символ '1', то к десятичному числу добавляется 2 в степени текущего бита (dec = dec * 2 + 1);
    • Если символ '0', то к десятичному числу добавляется 2 в степени текущего бита (dec = dec * 2).
  6. Выводятся исходная и результирующая строки.
  7. Программа ожидает нажатия клавиши для завершения работы.
  8. Возвращается 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы