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