C 压缩字符数据
我有一个5 x 10C 压缩字符数据,c,compression,C,Compression,我有一个5 x 10char矩阵,我想把它压缩成一个游程编码 printf("Enter your data (5x10) of characters: \n"); for (i = 0; i < SIZE1; i++) for (j = 0; j < SIZE2; j++) scanf("%c", &matrix2[i][j]); printf("\n"); compress(matrix2); break;
char
矩阵,我想把它压缩成一个游程编码
printf("Enter your data (5x10) of characters: \n");
for (i = 0; i < SIZE1; i++)
for (j = 0; j < SIZE2; j++)
scanf("%c", &matrix2[i][j]);
printf("\n");
compress(matrix2);
break;
void compress(char data[SIZE1][SIZE2])
{
int row, column, count=1;
for (row = 0; row < SIZE1; row++)
{
for (column = 0; column < SIZE2; column++)
{
if (data[row][column] == data[row][column + 1])
{
count++;
}
else
{
printf("%c%d", data[row][column], count);
count = 1;
}
}
}
}
输出:
a3b3c3d1
1a2b2c2d2e2
1a10
1a1b1c1a1b1c1a1b1c1a1
1a3b3
预期产出:
a3b3c3d1
a2b2c2d2e2
a10
a1b1c1a1b1c1a1b1c1a1
a3b3c4
这也算上了换行符。我相信评论者建议这样做:
printf("Enter your data (5x10) of characters: \n");
for (i = 0; i < SIZE1; i++)
for (j = 0; j < SIZE2; j++)
scanf("%c", &matrix2[i][j]);
printf("\n");
compress(matrix2);
break;
void compress(char data[SIZE1][SIZE2])
{
int row, column, count=1;
for (row = 0; row < SIZE1; row++)
{
for (column = 0; column < SIZE2; column++)
{
if (data[row][column] == data[row][column + 1])
{
count++;
}
else
{
if (data[row][column] != '\n')
{
printf("%c%d", data[row][column], count);
count = 1;
}
}
}
}
}
printf(“输入字符的数据(5x10):\n”);
对于(i=0;i
更改数据输入。让它处理\n
和错误检测
printf("Enter your data (%dx%d) of characters: \n", SIZE1, SIZE2);
for (i = 0; i < SIZE1; i++) {
char buffer[(SIZE2 + 2)*2]; // Consider IO buffers 2x the needed size
if (fgets(buffer, sizeof buffer, stdin) == NULL)
Handle_EndOfFileOrIOError();
size_t len = strlen(buffer);
if (len != SIZE2+1 || buffer[len-1] != '\n')
Handle_UnexpectDataLengthError(buffer, len);
for (j = 0; j < SIZE2; j++) {
matrix2[i][j] = buffer[j];
}
// or simply memcpy(matrix2[i], buffer, SIZE2);
printf("\n");
compress(matrix2);
break;
printf(“输入字符的数据(%dx%d):\n”、大小1、大小2);
对于(i=0;i
1前面有一个新行字符(\n
)。因此..我认为您没有使用fgets()
当从输入中读取这些并剥离尾随换行符时?不,这只是一个普通的scanf函数,用于读取矩阵并压缩数据。如何删除换行符?在我看来,此代码不起作用,因为函数不会获得SIZE1和SIZE2;因为函数接收到指向数组第一个元素的指针。data[row][column+1]
可能正在检查由于循环限制可能不应该检查的内容…OP编辑了输入。现在它正在计算换行:)。因为我是编程新手,而且还没有学习缓冲区,有没有办法检测“\n”并阻止它进入数组?因为问题是“\n”在数组中被考虑,我的最后4个数字没有记录在数组中。
printf("Enter your data (%dx%d) of characters: \n", SIZE1, SIZE2);
for (i = 0; i < SIZE1; i++) {
char buffer[(SIZE2 + 2)*2]; // Consider IO buffers 2x the needed size
if (fgets(buffer, sizeof buffer, stdin) == NULL)
Handle_EndOfFileOrIOError();
size_t len = strlen(buffer);
if (len != SIZE2+1 || buffer[len-1] != '\n')
Handle_UnexpectDataLengthError(buffer, len);
for (j = 0; j < SIZE2; j++) {
matrix2[i][j] = buffer[j];
}
// or simply memcpy(matrix2[i], buffer, SIZE2);
printf("\n");
compress(matrix2);
break;