题目:文本加密
输入k,表示有k组测试数据;
每组测试数据:输入一串字符串s,和一个int数组p[i],变换次数t
字符串第i位的字母将变换到p[i]的位置
例如:
输入
1
abc
1 2 0
1
输出
cab
输入:
2
abcdefg
5 2 3 4 1 6 0
1
abcdefg
5 2 3 4 1 6 0
2
输出:
gebcdaf
fdebcga
代码
#include<iostream> #include<cstring> using namespace std; void change( char* &s,int p[]){ //引用传递:直接用&得到指针,对指针内容进行修改 char* sc =new char; int len=strlen(s); for(int i=0;i<len;i++){ sc[p[i]]=s[i]; } s=sc; } /* char* change(char* s,int p[]){ // 值传递:有返回值 char* sc =new char; int len=strlen(s); for(int i=0;i<len;i++){ sc[p[i]]=s[i]; } return sc; }*/ int main(){ int k; cin>>k; int p[110]; while(k--){ char* s = new char; cin>>s; int len=strlen(s); for(int i=0;i<len;i++) cin>>p[i]; int t; cin>>t; for(int i=0;i<t;i++){ change(s,p); //s=change(s,p); } for(int i=0;i<len;i++){ cout<<s[i]; } cout<<endl; } }
注:
1.引用一个指针的时候,格式为 char * & p;
2.每创建一个指针一定要记得分配空间:
c:(malloc) :
#include<malloc.h>
char * p1 = (char*)malloc(sizeof(char));
c++:(new)
char * p1 = new char;