题目描述
现在有多组整数数组,需要将它们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。
输入描述
第一行是每次读取的固定长度,0<长度<10
第二行是整数数组的数目,0<数目<1000
第3-n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔,最大
不超过100个元素。
输出描述
输出一个新的数组,用逗号分隔
用例
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.现在有多组整数数组,需要将它们合并成新的数组。
2.合并的规则是,按顺序从每个数组取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,那么取出剩余部分放到新的数组中然后继续下一行。
3.输入描述:第一行是每次读取的固定长度长度大于0小于10
第二行是整数数组的数目,数目大于0小于1000,
第3-n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔,最大不超过100个元素。
4.输出描述:输出一个新的数组,用逗号分隔。
二、解题思路
1.首先我们定义一个整数接收固定长度int l;
2.然后我们声明一个整数变量接收数组数目int n;
3.然后我们声明一个字符串二维数组char string[n][100];
4.使用string接收数据
5.对于每个string中的字符串,我们截取长度为l的数字,放到新数组char newarr[1000];中然后将字符串变短,
6.当string中还有字符串长度大于0的时候继续
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>
int main() {
int n;
int l;
// 读取每次读取的固定长度l和数组数量n
scanf("%d %d", &l, &n);
char string[n][100];
for(int i = 0; i < n; i++) {
// 读取数组
scanf("%s",string[i]);
printf("%s\n", string[i]);
}
// 定义一个left变量用来表示还有没有读取完的数组
int left = n;
char newarr[1000];
int index = 0;
while(left > 0) {
for(int i = 0; i < n; i++) {
if(strlen(string[i]) == 0) continue;
int countdot = 0;
int cut = 0;
for(int j = 0; j <= strlen(string[i]) && countdot < l; j++){
if(isdigit(string[i][j])) {
newarr[index++] = string[i][j] - '0';
printf("%c",string[i][j]);
cut++;
} else if(string[i][j] == ',') {
newarr[index++] = ',';
printf(",");
countdot++;
cut++;
} else if(string[i][j] == '\0') {
left--;
if(left > 0) printf(",");
}
}
strncpy(string[i], string[i] + cut, strlen(string[i]) - cut);
string[i][strlen(string[i]) - cut] = '\0';
}
}
return 0;
}