【习题记录】实验11-1-7 藏头诗(PTA C)

本题要求编写一个解密藏头诗的程序。

注:在 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个字节,所以略有不同。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值