完善程序 · 答案 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
(本题为阅读程序 / 完善程序,完整题目与测试数据见平台)看到映射表大小写不定 → 先统一成小写再查表
①判小写致越界;②漏小写分支致崩溃;③多转大写逻辑反了。
考点:字符串替换、大小写分流、数组下标计算
输入字符串 $S$ 和映射表 $S'$,将 $S$ 中每个字母替换为 $S'$ 对应位置字母的同写形式(大写换大写,小写换小写),输出结果。