您的位置:首页 > 其它

ACM程序设计书中题目--J(大写字母的更替)

2017-03-07 22:28 316 查看
题目大意:首先输入一个n,然后接下来n行每一行输入一串由不多于50个
4000
大写字母组成的字符串,将字符串中的每一个字母都依次变为其下一个字母,例:A->B,C->D,以此类推,Z->A。

解题思路:

1、该题是多组测试数据,且每组测试数据的字符串数量确定,所以先输入n,之后用while(cin>>n)。

2、因为有大量的测试数据,所以应用结构体,首先要把每组测试数据中的字符串进行输入,即构建一个结构体,应用char型数组,输入测试数据。

3、对于每组测试数据,由于字母的变换规律相同,所以很容易想到应用字符的ACSII码值,即对于一个数组内所有的字母,除Z之外的,均可以直接将该字母+1,得到新的字母,而Z则-25,完成对字符串的变换。

4、对结构体内字符数组的输出,用循环,逐个输出。要注意的是,样例输出中的String #1中间有空格,所以输出要控制格式。

源代码

#include <bits/stdc++.h>

using namespace std;

struct aaa           //定义结构体

{

   char a[50];

}b[10000];

int main()

{

    int i,n,l,j;

   while(cin>>n)   //输入n

    {

   for (i=1;i<=n;i++)

    {

       cin>>b[i].a;    //输入字符串

       for (j=0;j<(int)strlen(b[i].a);j++)    //字符串内字母的变换

       {

           if (b[i].a[j]=='Z')

           b[i].a[j]=b[i].a[j]-25;

           else

           b[i].a[j]=b[i].a[j]+1;

       }

    }

   for (i=1;i<=n;i++)    //输出

    {

       cout<<"String #"<<i<<endl;    //注意这里的空格

       for (j=0;j<(int)strlen(b[i].a);j++)

       cout<<b[i].a[j];

       cout<<endl<<endl;

    }

    }

   return 0;

}

做题感想:在一个自认为比较难的题没有解决之后,做了这个还是比较简单的题。这个题因为粗心提交错了好几遍,主要文体出现在了字母的变换以及输出的格式。之前几次提交错误是因为Z变A的时候粗心写成了-26,应该是-25,输出的格式首先第一点是每组样例后都有一行空格,其次string和#之间有空格,这些都是不应该出现的问题。虽然A了,但是以后还是要注意避免这些不该出现的错误。不过总算做出来一个,虽然比较简单但是还是比较开心的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: