本题要求编写一个解密藏头诗的程序。
注:在 2022 年 7 月 14 日 16 点 50 分以后,该题数据修改为 UTF-8 编码。
输入格式:
输入为一首中文藏头诗,一共四句,每句一行。注意:一个汉字占三个字节。
输出格式:
取出每句的第一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。
答案在最后。
一开始的代码:
但是永远结束不了,很疑惑。想自查一下,在strcat()前后加了两个puts()看看result如何,顺便打印读取的第一个文字ch。
输出:
ch好像读取成功了。但是result不是初始化为空吗?为什么是三个乱字?从后面的结果来看,确实也连接了。尝试在初始化后打印result,确实为空。这个过程做了声明变量ch,想了半天,意识到是result虽然给了9字节,其实只占了一字节,声明ch后ch盖在了result后面8字节上(如果没记错的话)。把代码修改如下:
输出如下:
正确了!对于这个输入,result最终应该是“床疑举低”,也就是说result已经写入成功了,但是没有结束。这是怎么回事? 这一点我实在想不通,因为理论i是可以到4的,然后应该会退出循环。但是我没想明白,这个问题搁置了。
又想到我输出一行,最终ch只取了两个,那ch应该越界了,这可能是导致没有结束的原因。于是需要一个东西来承接第一个汉字后面的内容。改写代码如下:
输出:
这回是真成功了,看来没有猜想错。
最终提交平台代码如下:
#include<stdio.h>
#include<string.h>
#define Line 4
int main()
{
char ch[4];
char temp[30];
char result[3*4+1] = "";
int j=0;
for(int i=0; i<Line; i++)
{
scanf("%3s", ch);
scanf("%s", temp);
ch[3] = '\0';
strcat(result, ch);
}
puts(result);
return 0;
}
结果:
因为平台上一个汉字是3个字节,但在我系统上只是2个字节,所以略有不同。