深圳市建设工程监理协会网站阜新做网站
2026/4/18 11:59:17 网站建设 项目流程
深圳市建设工程监理协会网站,阜新做网站,长沙网络工程学院,wordpress调用相关页面题目描述在大学里#xff0c;很多单词都是一词多义#xff0c;偶尔在文章里还要用引申义。这困扰 Redraiment 很长的时间#xff0c;他开始搜集那些单词的所有意义。他发现了一些规律#xff0c;例如 a 能用 e 来代替#xff0c;c 能用 f来代替…… 现在他给出了字母的替换…题目描述在大学里很多单词都是一词多义偶尔在文章里还要用引申义。这困扰 Redraiment 很长的时间他开始搜集那些单词的所有意义。他发现了一些规律例如 a 能用 e 来代替c 能用 f来代替…… 现在他给出了字母的替换规则如下所示A 被 E 替换B 被 C 替换依次类推。A B C D E F G H I J K L M N O P Q R S T U V W X Y Z E C F A J K L B D G H I V W Z Y M N O P Q R S T U X a b c d e f g h i j k l m n o p q r s t u v w x y z e r w q t y g h b n u i o p s j k d l f a z x c v m输入本题包括多组测试数据。每组测试数据为一行仅由字母和空格组成的字符串空格不变。 输入以单行#结束。输出对应每组测试数据替换后输出它的引申义。输入 Ilttabaje zaujljg # 输出 Different meaning#include stdio.h #include string.h int main() { // 大写字母映射表 char upper_map[26] { E, C, F, A, J, K, L, B, D, G, H, I, V, W, Z, Y, M, N, O, P, Q, R, S, T, U, X }; // 小写字母映射表 char lower_map[26] { e, r, w, q, t, y, g, h, b, n, u, i, o, p, s, j, k, d, l, f, a, z, x, c, v, m }; char line[1000]; while (1) { // 读取一行,包括空格 if (fgets(line, sizeof(line), stdin) NULL) break; // 去掉换行符 int len strlen(line); if (len 0 line[len - 1] \n) { line[len - 1] \0; len--; } // 检查是否结束单行# if (len 1 line[0] #) break; // 处理每个字符 for (int i 0; i len; i) { char ch line[i];//将输入的字符存储在ch中 if (ch A ch Z) { // 大写字母映射 line[i] upper_map[ch - A];//右侧数组下标表示的是第几个映射字母 } else if (ch a ch z) { // 小写字母映射 line[i] lower_map[ch - a]; } // 空格和其他字符不变 } // 输出结果 printf(%s\n, line); } return 0; }一. if (fgets(line, sizeof(line), stdin) NULL) break;用途是从标准输入中读取字符直到遇到1.读取了sizeof(line)-1个字符2.遇到换行符\n3.遇到文件结束符。上述三个中的一个情况就会结束输入。之后自动添加字符串结束符\0到末尾。但会保留换行符\n如果读取到了示例假设输入Hello\n读取后 line 的内容索引: 0 1 2 3 4 5 6字符: H e l l o \n \0所以 fgets 包括· ✅ 读取的字符包括换行符 \n· ✅ 自动在末尾添加 \0· ❌ 不读取字符串结束符本身而是自动添加上述代码中去掉换行符流程是基于上述fgets的读取原则处理流程示例1. fgets 读取输入例如test\n2. line 变成test\n\03. strlen(line) 返回 5t,e,s,t,\n//返回字符串的长度不包括字符串结束符但包括换行符4. 检查最后一个字符是 \n将其替换为 \05. line 现在test\0\0有两个\0但第一个有效6. len 减为 4在本题中fgets的运行过程读取的内容Ilttabaje zaujljg\n· 自动在末尾添加 \0步骤2读取后 line 的内容索引: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18字符: I l t t a b a j e z a u j l i g \n \0步骤3处理换行符int len strlen(line); // len 18包括换行符if (len 0 line[len - 1] \n) {line[len - 1] \0; // 去掉换行符len--; // len 17}现在 line 的内容Illtabaje zaujlig\0长度17个字符二.if (len 1 line[0] #) break;上述代码if条件语句有两个成立条件和之前做过的题有些一样。第一个条件只要len不等于1都不成立都不会结束循环。会继续往下运行。只有#以单行形式出现时才会结束循环结束程序。要想写出这个条件只需要仔细看题目。也可以用下面代码替换fgetsgets(line); int len strlen(line); // 检查是否结束单行# if (len 1 line[0] #) break;gets1.遇到换行符\n停止2.不存储换行符3.自动在末尾添加字符串换行符\0上述gets()输入的刚好是fgets()去掉换行符后的字符串内容所以刚好去掉处理换行符这一步骤。示例输入输入Hello World\ngets() 读取后索引: 0 1 2 3 4 5 6 7 8 9 10 11字符: H e l l o W o r l d \0三.看到字母肯定想到要找规律但是在ASCII码上没有数学规律根本找不出规律所以考虑是固定的替换表所以将映射大小写字母用数组表示出来然后根据下标循环替换。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询