给定一个 h×w 的字符矩阵,保留从第 x1 行到第 x2 行、第 y1 列到第 y2 列的子矩阵,输出裁剪后的内容。
直接按行输出指定范围内的字符即可。
关键点:
[x1, x2][y1, y2]cpp1#include <cstdio> 2using namespace std; 3 4const int N = 105; 5int h, w; 6char s[N][N]; 7int x1, x2, y1, y2; 8 9int main() { 10 scanf("%d%d", &h, &w); 11 scanf("%d%d%d%d", &x1, &x2, &y1, &y2); 12 13 // 读入画布(从1开始编号方便处理) 14 for (int i = 1; i <= h; i++) { 15 scanf("%s", s[i] + 1); 16 } 17 18 // 输出裁剪后的画布 19 for (int i = x1; i <= x2; i++) { 20 for (int j = y1; j <= y2; j++) { 21 printf("%c", s[i][j]); 22 } 23 printf("\n"); 24 } 25 26 return 0; 27}
参考代码中利用字符串截断方式输出:
cpp1#include <cstdio> 2using namespace std; 3 4const int N = 105; 5int h, w; 6char s[N][N]; 7int x1, x2, y1, y2; 8 9int main() { 10 scanf("%d%d", &h, &w); 11 scanf("%d%d%d%d", &x1, &x2, &y1, &y2); 12 13 for (int i = 1; i <= h; i++) { 14 scanf("%s", s[i] + 1); 15 } 16 17 for (int i = x1; i <= x2; i++) { 18 s[i][y2 + 1] = '\0'; // 在结束位置截断 19 printf("%s\n", s[i] + y1); // 从起始位置输出 20 } 21 22 return 0; 23}
输入:
3 5
2 2 2 4
.....
.>_<.
.....
输出:
>_<