问题标题: 酷町堂:2853

0
0
已解决
夏义博
夏义博
初级守护
初级守护

2853   字符串加密

题目描述 Description

给出一个字符串,现在要将它传输给另外一个人。但是为了保密,现在要将这个字符串加密之后再进行传输。加密规则是:

1,将ASCII码为偶数的小写字母变为大写

2,将字符串中的数字的位置左右对称地交换位置(对字符串"a1b2c3d4"应用此规则会变为"a4b3c2d1")

3,其余字符不作任何改变

现在请你输出经加密的字符串。

输入描述 Input Description

输入一个原始字符串

输出描述 Output Description

输出经加密的字符串

样例输入 Sample Input

 

#a12b3cd

样例输出 Sample Output

 

#a32B1cD

 

 

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a,d,c;
    getline(cin,a);
    for(int i=1;i<=a.size();i++)
    {
        if(a[i+0]%2==0)
        {
            if(a[i]<='z'&&a[i]>='a')
            {
                a[i]=a[i]-32;
            }
        }
    }
    for(int i=1;i<=a.size();i++)
    {
        d[i]=a.size();
        while(d[i]<'1'&&d[i]>'9') d[i]--;
        while(c[i]<'1'&&c[i]>'9') c[i]++;
        if(c[i]>='1'&&c[i]<='9'&&d[i]>='1'&&d[i]<='9')
        {
            swap(d[i],c[i]);
        }
    }
    cout<<a;
    return 0;
} 

 

 

 

不知道怎么把数字交换。


1
已采纳
王浩
王浩
新手天翼
新手天翼

    首先要注意,遍历字符串a是从下标0开始,到a.size()-1结束,而不是从1到a.size() 。

    至于交换数字的问题,定义两个数组,数组a存放字符串中是“数字”的字符的下标,数组b存放“数字”字符的值。在遍历字符串的时候,如果遇到“数字”字符,就把它的下标和值分别存到两个数组中。把字符串中以数组a中元素的值(正向)作下标的字符换成数组b中元素的值(逆向)

0
0
冯绍安
冯绍安
中级守护
中级守护

先变大小写,然后录取数字,接着交换数字位置

最后输出就可以了

0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

正经的:指针就可以解决啊,字符串每个字符遍历一遍,类似回文数

不正经的:这道题说要用将ASCLL码值为偶数的要大写,那么应该先用sort或qsort排一下这个字符串,而这个字符串队列兼栈要判断ASCLL码值是否为偶数值,如果是0以下就跳过,避免-1等数字出现我们要用到goto函数和动态规划,但是要注意这是静态变量数组(字符串二维数组,保证高为三,(a[top[i]],a2)表示递归的这是个ASCLL值是-1以上的一个字符,a[top[i]++][top[i-2]]返回的是个long long值,显示true或false,或者a[top[a2]]。要是判断这要写一个树剖的函数,深搜一下哪些树节点是偶数,如此分而冶之的进行队列式的递推......最后要用到AOV网进行拓扑排序。

0
王翰闻
王翰闻
新手守护
新手守护

书上有,《信息学奥赛一本通》,某一章习题里。

我要回答