赞
踩
本题要求编写一个解密藏尾诗的程序。
注:在 2023 年 1 月 17 日 15 点 14 分以后,该题数据修改为 UTF-8 编码。
输入为一首中文藏尾诗,一共四句。每句一行,但句子不一定是等长的,最短一个汉字,最长九个汉字。注意:一个汉字占三个字节。
取出每句的最后一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。
- 悠悠田园风
- 然而心难平
- 兰花轻涌浪
- 兰香愈幽静
风平浪静
首先,我们仔细阅读一下题目,并查找一些注意点。
可能这道题目跟很多c语言初学者以往所做的题目不相同(笔者也是第一次见(o_O) !),不同于之前的数字或者英文,它所需要的输入和输出格式是汉字,题目也给出了一条信息:一个汉字占三个字节。输入的诗有四句,每句一行,句子不一定等长,最短一个汉字,最长九个汉字。我们需要输出每句最后一个汉字,末尾要换行。
笔者认为,解题的核心点是:不要把汉字当汉字去理解,要把每个汉字都看成是三个字符。
我们先定义一个字符数组用来存储输入的这四句诗(也就是四行字符串),接着再定义一个字符数组用来存储每句的最后一个汉字(也就是每行字符串的最后三个字符),最终输出后者的字符数组,并且在末尾输入换行符。
首先,我们对所输入的四句诗,还是用字符数组来存储它们,接着对于每行最后一个汉字的输出,我们先做一个外循环,对每一行都做操作,再做一个内循环,定义一个字符型变量,依次将所指定的一行的倒数第三个、倒数第二个、倒数第一个字符(相当于指定行的最后一个汉字)赋值给它,依次对它进行输出。最后循环结束,在末尾输入换行符。
这样,我们的输出就不需要用到字符数组。
让我们从这两种思路中来对比分析一下字符型变量和字符数组的优缺点:
字符型变量 | 字符数组 | |
优点 | 简单:字符型变量只存储一个字符,因此在某些情况下更简单、更轻量。 灵活性:适合存储和处理单个字符,对于一些特定的操作,使用字符型变量更方便。 | 多字符:可以存储一串字符,适合处理字符串。 方便:字符数组提供了更方便的方式来操作和处理多个字符。 |
缺点 | 限制:仅能存储一个字符,不适合处理较长的字符串。 不便: 如果要处理多个字符,需要多个字符型变量,不够方便。 | 固定长度:在声明时需要确定数组的长度,这可能导致浪费内存或者不足以存储实际需要的字符串。 不灵活:如果字符串长度超过数组长度,可能导致溢出问题,需要额外的处理。 |
综合考虑 | 如果处理的是一个字符或者很短的字符串,使用字符型变量更合适。 如果需要处理较长的字符串或者字符串数组,使用字符数组更为便捷。 |
看到这里,是不是觉得又涨姿势了?^ω^
这里就只展示根据笔者新思路所编写的代码,普遍思路的代码可以自行翻阅其他大佬的博文去看看,这边笔者就不展示了哈(其实是我困了不想写( ̄ρ ̄)..zzZZ)。
- #include <stdio.h>
- #include <string.h>
-
- int main() {
- // 声明一个二维字符数组,用于存储输入的4个字符串即4句诗,每个字符串最多包含27个字符和一个空字符
- char zi[4][28];
- int i, j;
-
- // 循环读取4个字符串输入
- for (i = 0; i < 4; i++) {
- gets(zi[i]);
- }
-
- // 循环遍历每个字符串
- for (i = 0; i < 4; i++) {
- // 循环遍历每个字符串的后三个字符,这三个字符指向最后一个汉字
- for (j = 0; j < 3; j++) {
- char sb;
- // 获取每个字符串的倒数第三个及以后的字符
- sb = zi[i][strlen(zi[i]) - 3 + j];
- // 打印获取到的字符
- printf("%c", sb);
- }
- }
-
- // 输出换行符
- printf("\n");
-
- return 0;
- }
由于笔者电量耗尽,现已强制关机(¦ꄰ[▓▓],请各位读者自行总结,望知悉,勿念!⊂((≧⊥≦))⊃
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。