用c语言编写一个解密藏头诗的程序。 注:在 2022 年 7 月 14 日 16 点 50 分以后,该题数据修改为 UTF-8 编码。 输入格式: 输入为一首中文藏头诗,一共四句,每句一行。注意:一个汉字占三个字节。 输出格式: 取出每句的第一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。 输入样例: 一叶轻舟向东流 帆稍轻握杨柳手 风纤碧波微起舞 顺水任从雅客流 输出样例: 一帆风顺
时间: 2024-03-10 22:50:19 浏览: 80
以下是实现题目功能的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char s[4][10];
char ans[10];
for (int i = 0; i < 4; i++) {
fgets(s[i], 10, stdin);
}
for (int i = 0; i < 4; i++) {
ans[i] = s[i][0];
}
ans[4] = '\n';
printf("%s", ans);
return 0;
}
```
该程序首先使用fgets函数读入四句藏头诗,每句最多读入9个字符(包括换行符),并将其存储在字符数组s中。然后遍历每句藏头诗,将其第一个汉字取出并存储在字符数组ans中。最后在ans末尾添加一个换行符,输出ans即可。注意:在读入藏头诗时,要使用fgets函数而不是scanf函数,否则可能会读入多余的空格或回车符。
相关问题
编写一个解密藏头诗的程序,一个汉字占两个字节。C语言
中的一个汉字可以用两个字符表示。藏头诗是指诗的每个句子的第一个字按照给定的顺序排列,可以组成一个新的词语或者句子。请问你有什么想法?
为了编写一个解密藏头诗的程序,我们需要先读取藏头诗文件。接着,我们可以从中提取出每个句子的第一个字,并按照指定的顺序排序。之后,我们需要将每个排序后的字转换为对应的汉字,并最终输出解密后的藏头诗。
以下是一个简单的程序示例:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAX_SENTENCE 200 // 定义每个句子最大的字符数
#define MAX_WORD 1000 // 定义词语表最大的字符数
#define CHAR_LEN 2 // 定义每个汉字的长度为2
int main()
{
FILE * fp = NULL;
char sentence[MAX_SENTENCE + 1]; // 定义句子缓存数组
char words[MAX_WORD + 1]; // 定义词语表缓存数组
int i, j, k, count;
int order[128] = { 0 }; // 定义一个记录排列顺序的数组
// 读取词语表
fp = fopen("word.list", "r");
if (fp == NULL) {
printf("Can't open word.list file\n");
exit(1);
}
fgets(words, MAX_WORD + 1, fp);
fclose(fp);
// 解析词语表
count = 0;
for (i = 0; i < MAX_WORD; i++) {
if (words[i] == '\0') {
break;
}
if (words[i] == '\n') {
break;
}
order[(unsigned char)words[i]] = ++count;
}
// 读取藏头诗文件
fp = fopen("poem.txt", "r");
if (fp == NULL) {
printf("Can't open poem.txt file\n");
exit(1);
}
// 逐行读取解密藏头诗文件
while (fgets(sentence, MAX_SENTENCE + 1, fp)) {
if (sentence[0] == '\n') {
continue;
}
// 读取每个句子的第一个字符
count = 0;
for (i = 0; i < MAX_SENTENCE; i += CHAR_LEN) {
if (sentence[i] == '\0') {
break;
}
if (sentence[i] < 0) {
i++;
continue;
}
if (count++ == 0) {
printf("%c", sentence[i]);
}
}
}
fclose(fp);
return 0;
}
```
以上程序以读取词语表和藏头诗文件为例,提供了一种解析的方式,可以按照指定的顺序排序,并通过打印的方式输出解密后的藏头诗。
请注意,以上示例仅供参考,实际应用应根据具体需求进行进一步开发和优化。
检查并改正c语言程序:本题要求编写一个解密藏头诗的程序。 输入格式: 输入为一首中文藏头诗,一共四句,每句一行。注意:一个汉字占三个字节。 输出格式: 取出每句的第一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。 输入样例: 一叶轻舟向东流 帆稍轻握杨柳手 风纤碧波微起舞 顺水任从雅客流 输出样例: 一帆风顺.#include <stdio.h> int main() { char a[22],b[22],c[22],d[22]; for(int i=0;i<21;i++) scanf("%s",a[i]); for(int j=0;j<21;j++)scanf("%s",b[j]); for(int k=0;k<21;k++)scanf("%s",c[k]); for(int l=0;l<21;l++)scanf("%s",d[l]); printf("%c%c%c%c\n", a[0], b[0], c[0], d[0]); }
改正后的程序如下:
```
#include <stdio.h>
int main() {
char a[10], b[10], c[10], d[10];
scanf("%s", a);
scanf("%s", b);
scanf("%s", c);
scanf("%s", d);
printf("%c%c%c%c\n", a[0], b[0], c[0], d[0]);
return 0;
}
```
改正的问题:
1. 数组长度不够,应该至少为10,因为每句四个汉字,每个汉字占三个字节,加上字符串结尾符号'\0',共占用13个字节的空间。
2. 循环读入时,应该使用scanf("%s", a),而不是scanf("%c", &a),因为%s可以读入字符串,而%c只能读入单个字符。
3. 循环读入时,应该只读入一个字符串,而不是每次读入一个字符。
4. 循环读入时,应该使用不同的数组,而不是同一个数组,因为每次读入一个新的字符串。
阅读全文