arrays - 切片变长字符数组
问题描述
我有一个可变字符串,我需要将其分割成较小的字符串,主字符串应视为具有一定宽度和高度 MxM 的二维数组,较小的字符串应切成 NxN 大小的块。所以举个例子,如果我有下面的字符串,char source[17] = "ABCDEFGHIJKLMNS0"
他的二维大小是4x4,小块的大小是2x2,那么小块应该是ABEF
, CDGH
, IJMN
, KLSO
.
换句话说,字符串应该被视为
ABCD
EFGH
IJKL
MNSO
并且 NxN 应该从中删除,例如:
AB
EF
始终限制这些块应该是线性数组作为主字符串。
我已经尝试使用以下代码嵌套 3 个,但我不知道如何计算主数组的索引以便以这种方式切割块
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char pixelsSource[17] = "ABCDEFGHIJKLMNS0";
char pixelsTarget[4][5];
int Y = 0;
int X = 0;
for (int block = 0; block < 4; block++)
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
pixelsTarget[block][(i * 2) + j] = pixelsSource[(i * 2) + j];
printf("[%d][%d] = [%d] \n", block, (i * 2) + j, (i * 2));
}
}
}
for (int block = 0; block < 4; block++)
{
printf("%s\n", pixelsTarget[block]);
}
}
解决方案
我将其分解为更分段的方式,并将其概括为M
& N
。这是带有内联注释的代码:
#include <stdio.h>
#define M 4
#define N 2
int main(void)
{
// source data is an M * M string(plus null terminator)
char pixelsSource[M * M + 1] = "ABCDEFGHIJKLMNSO";
// destination is an array of N*N strings; there are M*M/N*N of them
char pixelsTarget[(M*M)/(N*N)][N*N + 1];
// iterate over the source array; blockX and blockY are the coordinate of the top-left corner
// of the sub-block to be extracted
for (int blockX = 0; blockX < M; blockX += N)
{
for (int blockY = 0; blockY < M; blockY += N)
{
int dstWord = blockX/N + blockY;
// for each letter in the sub-block, copy that letter over to the destination array
for (int y = 0; y < N; y++)
{
for (int x = 0; x < N; x++)
{
int dstIndex = y*N + x;
int srcIndex = (blockY + y)*M + blockX + x;
printf("[%d][%d] = [%d]\n", dstWord, dstIndex, srcIndex);
pixelsTarget[dstWord][dstIndex] = pixelsSource[srcIndex];
}
}
// null-terminate destination word
pixelsTarget[dstWord][N*N] = '\0';
}
}
// output
for (int block = 0; block < (M * M) / (N * N); block++)
{
printf("%s\n", pixelsTarget[block]);
}
}
推荐阅读
- assembly - xchg ax, ax 到底对齐的是什么?
- java - 有没有办法使用Java中的aspose库从ppt生成带有动画的视频
- python - Pandas cumsum() 分组输出不同于 sum() 分组输出
- mongodb - 无法在聚合管道上从 BSON 类型字符串转换为日期
- javascript - 如何在axios查询中添加二级查询?
- typescript - 返回此数组的泛型类型的类型提示数组
- arrays - 具有日期条件的 Excel 不同计数(忽略的空白)
- spring-boot - 在 200 响应后检查来自不同微服务的 API 调用状态
- python - How to show the regression line in seaborn linear regression jointplot
- sql - 在同一插入 SQL 中插入 2 选择