NOIP 普及组初赛 · NOIP 2008 普及组初赛试题 第 27 题

完善程序 · 答案 change[i] >= 'A' && change[i] <= 'Z'change[i] <= 'Z'str[i] >= 'A' && str[i] <= 'Z'str[i] <= 'Z'str[i] = change[str[i] - 'a'];ChangeString(); · 考点:输入输出、位运算、分支结构、循环结构、字符串(string)

← 整套速查表 NOIP 普及组初赛 全部真题

题目

完善程序: (字符串替换)给定一个字符串 $S$($S$ 仅包含大小写字母),下面的程序将 $S$ 中的每个字母用规定的字母替换,并输出 $S$ 经过替换后的结果。程序的输入是两个字符串,第一个字符串是给定的字符串 $S$,第二个字符串 $S'$ 由 $26$ 个字母组成,它是 $a\sim z$ 的任一排列,大小写不定,$S'$ 规定了每个字母对应的替换字母:$S'$ 中的第一个字母是字母 $\texttt A$ 和 $\texttt a$ 的替换字母,即 $S$ 中的 $\texttt A$ 用该字母的大写替换,$S$ 中的 $\texttt a$ 用该字母的小写替换;$S'$ 中的第二个字母是字母 $\texttt B$ 和 $\texttt b$ 的替换字母,即 $S$ 中的 $\texttt B$ 用该字母的大写替换,$S$ 中的 $\texttt b$ 用该字母的小写替换;……以此类推。

#include <iostream>
#include <string.h>
char change[26], str[5000];
using namespace std;

void CheckChangeRule()
{
    int i;
    for (i = 0;i < 26;i ++)
    {
        if ( [                   ①                   ] )
               change[i] -= 'A' - 'a';
    }
}

void ChangeString()
{
    int i;
    for (i = 0;i <strlen(str);i ++)
    {
          if (  [                 ②                    ]  )
                str[i] = change[str[i] - 'A'] -'a' + 'A';
          else
    

(本题为阅读程序 / 完善程序,完整题目与测试数据见平台)
答案:change[i] >= 'A' && change[i] <= 'Z'change[i] <= 'Z'str[i] >= 'A' && str[i] <= 'Z'str[i] <= 'Z'str[i] = change[str[i] - 'a'];ChangeString();

考点

输入输出位运算 讲解 →位运算 真题汇总 →分支结构循环结构字符串(string)

解题思维

看到映射表大小写不定 → 先统一成小写再查表

常见错误

①判小写致越界;②漏小写分支致崩溃;③多转大写逻辑反了。

详细解析(节选)

考点:字符串替换、大小写分流、数组下标计算

程序在做什么

输入字符串 $S$ 和映射表 $S'$,将 $S$ 中每个字母替换为 $S'$ 对应位置字母的同写形式(大写换大写,小写换小写),输出结果。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断