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