我的同事Jimmy是C / C ++的新手。他也是一个学习缓慢的人。现在,公平地说,他的代码总是可以编译,但是他有一些很草率的习惯。例如,每个人都知道您可以定义如下数组:
int spam[] = {4, 8, 15, 16, 23, 42};
除了吉米,每个人都是。他深信制作数组的唯一方法是这样的:
int spam[6];
spam[0] = 4;
spam[1] = 8;
spam[2] = 15;
spam[3] = 16;
spam[4] = 23;
spam[5] = 42;
我在代码审查中一直为他修复此问题,但他不会学习。因此,我需要您编写一个工具,以便在他提交时自动为他完成操作¹。
挑战
我希望您编写一个完整的程序或一个将多行字符串作为输入并输出C数组的更紧凑版本的函数。输入将始终遵循此格式,包括空格:
identifier_one identifier_two[some_length];
identifier_two[0] = some_number;
identifier_two[1] = some_number;
identifier_two[2] = some_number;
...
identifier_two[some_length - 1] = some_number;
简而言之,输入将始终是有效且定义良好的C。更详细地:
所有标识符将仅由字母和下划线组成。该长度将始终至少为1,并且永远不会存在任何丢失或超出范围的索引。您还可以假设索引是有序的。例如:
foo bar[3];
bar[0] = 1
bar[2] = 9;
foo bar[1];
bar[0] = 1;
bar[1] = 3;
和
foo bar[3];
bar[2] = 9;
bar[0] = 1
bar[1] = 3
均为无效输入,可能会导致您的提交内容发生不确定的行为。您还可以假定所有数字都是有效的十进制数字,负数或正数。输入将没有多余的空间。输出应始终遵循以下格式,包括空格:
identifier_one identifier_two[] = {n1, n2, n3, ...};
以下是一些示例数据:
Input:
spam eggs[10];
eggs[0] = 0;
eggs[1] = 4;
eggs[2] = 8;
eggs[3] = -3;
eggs[4] = 3;
eggs[5] = 7;
eggs[6] = 888;
eggs[7] = 555;
eggs[8] = 0;
eggs[9] = -2;
Output:
spam eggs[] = {0, 4, 8, -3, 3, 7, 888, 555, 0, -2};
Input:
char ans[2];
ans[0] = 52;
ans[1] = 50;
Output:
char ans[] = {52, 50};
Input:
blah_blah quux[1];
quux[0] = 105;
Output:
blah_blah quux[] = {105};
您可以采用任何合理的格式输入和输出,例如STDIN / STDOUT,函数参数和返回值,读取和写入文件等。存在标准漏洞。以字节为单位的最短答案为胜!
¹这是消极的进取和可怕的想法。你是不是从我这里得到了这个想法。