Есть ли простой способ добавить префикс для каждого элемента массива в C?
Я решаю проблему с серым кодом. Я сделал свою логику, используя рекурсивный вызов. Все выглядит хорошо, но я не знаю, как добавить префикс "0" или "1" к каждому элементу массива. например) префикс 0: { 00, 01, 11, 10 } -> { 000, 001, 011, 010 } или префикс 1: { 00, 01, 11, 10 } -> { 100, 101, 111, 110 }
#include<stdio.h>
#include<string.h>
#include<math.h>
int grayCode(int list[], int bit)
{
int listLen = strlen(list); // calculate received array length
int revList[] = { 0 };
int newList[] = { 0 };
if (listLen < pow(2, bit)) // If the received array length is below 2^bit, proceed below.
{
for (int i = 0; i < listLen; i++) // create a reverse order array
{
revList[i] = list[listLen - i];
}
for (int i = 0; i < listLen; i++) // prefix 0 to each element of an received array, I know this doesn't work. How should I do it??
{
list[i] = "0" + list[i];
}
for (int i = 0; i < listLen; i++) // prefix 1 to each element of an reverse array, I know this doesn't work. How should I do it??
{
revList[i] = "1" + revList[i];
}
for (int i = 0; i < listLen; i++) // put all elements of received array in the new array
{
newList[i] = list[i];
}
for (int i = 0; i < listLen; i++) // put all elements of reverse array in the new array
{
newList[listLen + i] = revList[i];
}
for (int i = 0; i < listLen * 2; i++) // print all elements in a new array
{
printf("%d bit Gray Code is { ", bit);
printf("%d, ", newList[i]);
printf("}\n");
}
grayCode(newList, bit); // Recursive call
}
else if (listLen == pow(2, bit)) // If the received array length is same as 2^bit, return.
{
return 0;
}
}
int main(void)
{
int initList[2] = { 0, 1 };
int bit;
printf("Which bit of gray-code do you want? : ");
scanf_s("%d", &bit);
while (bit < 1)
{
printf("Input an integer bigger than 1 : ");
scanf_s("%d", &bit);
}
if (bit == 1)
{
printf("1 bit Gray Code is { 0, 1 }\n");
}
else if (bit > 1)
{
grayCode(initList, bit);
}
return 0;
}
1 ответ
Решение
Нет, вы не можете добавить 0
в качестве префикса к целому числу.
Целое число, начинающееся с 0
предполагается в восьмеричном представлении соответствующего десятичного целого числа, то есть:
(037)8 == (31)10
Если вы действительно хотите сохранить номера с префиксом 0
s, вам придется хранить числа в виде строк.
Вы можете использовать временную строку для хранения промежуточных продуктов.
Алгоритм будет:
char str[10] = "01"; // To be converted to 001
char temp[10];
strcpy(temp, "0"); // temp = "0", str = "01"
strcat(temp, str); // temp = "001", str = "01"
strcpy(str, temp); // temp = "001", str = "001"