Записать строку заменив каждую из последовательностей ее значением в десятичной системе счислениям - 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, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д