字符串替换(NOIP 2008普及组 初赛)

说明:本题为完善程序题

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

#include
#include
#include
using namespace std;
char change[26],str[5000];
void CheckChangeRule(){
    int i;
    for(i=0;i<26;i++)
        if(_______ (1)_______________) change[i]-='A'-'a';
}
void ChangeString(){
    int i;
    for(i=0;i>str;
    cin>>change;
    CheckChangeRule();
    _____(4)_________
    cout<

分析:从main函数开始看,联系到上面的ChangeString函数,因此(4)应填ChangeString();(注意哦,横线后没有分号!)

接下来,核心在于两个子函数中。

  首先,数组change存储S'中的字符,即替换字母;str是原字符串S。

由表达式change[i]-='A'-'a'可知,A的ASCII码为64,a的ASCII码为97,变形\Leftrightarrowchange[i]+=32;,其实就是把change中的大写字母转换为小写字母。因此(1)应填change[i]>='A'&&change[i]<='Z'。

来到ChangeString函数,第一个for语句扫描整个字符串S,由函数名可知,它的功能就是替换字符,有一个巧妙之处就是change[str[i]-'A'],此处也就是整个程序的核心。把无规律的ASCII码转换为字母对应的顺序(字母表顺序)(例如:设str[i]装的字符是A,则str[i]的值就为64,即64-64=0,变成了change[0]。),再由-'a'+'A'得,\Rightarrowstr[i]=change[str[i]-'A']-32;(由题知,被替换的字母如果是大写字母,则替换字母也为大写字母)因此(2)应填str[i]>='A'&&str[i]<='Z' 否则,str中为小写字母,则不用转换。

因此(3)填str[i]=change[str[i]-'a'];

整个程序到这里就结束了。

以下为完整代码:
 

#include
#include
#include
using namespace std;
char change[26],str[5000];
void CheckChangeRule(){
    int i;
    for(i=0;i<26;i++)
        if(change[i]>='A'&&change[i]<='Z') change[i]-='A'-'a';
}
void ChangeString(){
    int i;
    for(i=0;i='A'&&str[i]<='Z') str[i]=change[str[i]-'A']-'a'+'A';
        else str[i]=change[str[i]-'a'];
int main(){
    cin>>str;
    cin>>change;
    CheckChangeRule();
    ChangeString();
    cout<

 

你可能感兴趣的:(字符串替换(NOIP 2008普及组 初赛))