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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int main(void)
{
  char str[256];
  char res[256];
  char number[16];
 
  int dec = 0;
  int sequenceStarted = 0;
  int numberStarted = 0;
  int i = 0;
  int j = 0;
 
  memset(str, 0, sizeof(str));
  memset(res, 0, sizeof(res));
 
  strcpy(str, "n1 = 11010101, n2 = 11010100, n3 = 11110111!");
 
  for(i = 0; i < strlen(str); i++)
  {
    if ((str[i] == '0') || (str[i] == '1'))
    {
      sequenceStarted = 1;
      numberStarted = 1;
    }
    else sequenceStarted = 0;
 
    if (!sequenceStarted)
    {
      if (numberStarted)
      {
        sprintf(number, "%d", dec);
        strcat(res, number);
 
        numberStarted = 0;
        dec = 0;
        j = j + strlen(number);
      }
 
      res[j] = str[i];
      j++;
    }
    else
    {
      if (str[i] == '1') dec = dec * 2 + 1; 
      else if (str[i] == '0') dec = dec * 2;
    }
  }
 
  printf("Original string: '%s'\n", str);
  printf("Composed string: '%s'\n", res);
 
  getchar();
 
  return 0;
}

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

  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
Похожие ответы