题号:NC14651
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld
题目描述
Memory leak是c/c++中常见的错误,当一个字符串比预期的长的时候,它就会不停地访问下一个内存直到长度满足预期,举个例子如下代码运行后的结果。

现在dd和cc两个人作为一个小组完成C++老师布置的学习任务,gets读取与cout输出,在正式开始写代码前当然要先写伪代码啦~那么显然dd作为程序大佬伪代码当然是由他写的,并且其中只会出现定义(char ),读取(gets),输出(cout),并且保证定义的都是如char a[n]一样的字符串。
那么cc的任务就是对这些伪代码进行手动运算,查看输出结果。
本来呢,这是个很简单的任务,读取什么输出什么,只是dd在定义时总是随手写一个数字n定义char a[n],导致代码中可能会存在内存泄漏。
那么cc作为一个严谨的好学生,就算出现了问题,她也会给出和计算机运行后一样的结果。
但是当输入量变大时,cc就发现手算太麻烦了...因为dd的字符串长度参差不齐,总是会出现问题,但是作为一个理论大佬,她并不会写这个程序,她希望你可以帮她完成这个程序,并且输出所有结果。
输入描述:
多组数据,第一行输入一个整数T(<=20)表示有T组数据,
接下去多行读取中
存在四种格式:
1."cout s1" s1表示数组的名字,输出数组s1中的内容
2."gets s1 s" s1表示数组的名字,s表示读取到数组s1内的字符串内容,输入保证字符串长度<1000,并且只包含可见的ASCLL字符,并且每次gets会重写数组,并且不论读取字符串为什么,都在末尾加上"\n"(the symbol of end of a string)
3.“char s1 [s1_len],s2 [s2_len] ...;"定义类型保证为char, s1,s2为数组名称,s1_len,s2_len是长度限制。若没有出错,数组应该能储存下读取的字符串和'\0',不同数组的定义用逗号和空格分隔开,长度限制保证为正整数,且长度限制的总和≤10000.
3."return 0;" 表示一组数据的结束
每组数据中的第一行读取保证为格式3
保证输入文件小于10MB
输出描述:
对于每种操作输出相应内容
示例1
输入
复制
3
char a[5], b[5], c[5];
gets a C++
gets b Hello, world!
gets c guys
cout a
cout b
cout c
return 0;
char a[5];
cout a
gets a 233
gets a 2333
cout a
gets a 12345
cout a
return 0;
char str1[7], str2[2], str3[5];
gets str1 welcome
gets str2 to
gets str3 Shandong
cout str1
return 0;
输出
复制
C++
Helloguys
guys
2333
12345
welcometoShand