初级守护
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;
}
不知道怎么把数字交换。
新手天翼
首先要注意,遍历字符串a是从下标0开始,到a.size()-1结束,而不是从1到a.size() 。
至于交换数字的问题,定义两个数组,数组a存放字符串中是“数字”的字符的下标,数组b存放“数字”字符的值。在遍历字符串的时候,如果遇到“数字”字符,就把它的下标和值分别存到两个数组中。把字符串中以数组a中元素的值(正向)作下标的字符换成数组b中元素的值(逆向)
资深光能
正经的:指针就可以解决啊,字符串每个字符遍历一遍,类似回文数
不正经的:这道题说要用将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网进行拓扑排序。