题解 | #字符串加密#
字符串加密
http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include<stdio.h> #include<string.h> int main() { char key[101];//定义一个key while(gets(key)!=NULL) {
char scours[101];//要加密的字符串
gets(scours);
char key1[27];
char alpha[27];
char temp[27];
char new[101];
int lengthkey=strlen(key),lengthscours=strlen(scours);
int m=0;
for(int i=0;i<lengthkey;i++)//给关键字key去重
{
for(int j=i+1;j<lengthkey;j++)
{
if(key[i]==key[j])
{
for(int k=j;k<lengthkey-1;k++)
{
key[k]=key[k+1];
}
lengthkey--;
j--;
}
}
}
for(int i=0;i<lengthkey;i++)//把去重之后的关键字赋值给key1,这样key1的长度正好是去重之后有效的key的长度
{
key1[i]=key[i];
}
//puts(key1);
for(char i='a';i<='z';i++)//给字母表赋值,a-z
{
alpha[m]=i;
m++;
}
//printf("%d",m);//m=26
//puts(alpha);
for(int i=0;i<m;i++)
{
temp[i]=alpha[i];
}
for(int i=0;i<lengthkey;i++)//在临时temp中找到与key中相同的字母并删除
{
for(int j=0;j<m;j++)
{
if(key1[i]==temp[j])
{
for(int k=j;k<m-1;k++)
{
temp[k]=temp[k+1];
}
m--;
j--;
}
}
}
//printf("%d",m);//m=19
//puts(temp);
for(int i=0;i<m;i++)//把删除后的temp连接到key1后面,这样key1就是排好的字符串
{
key1[lengthkey+i]=temp[i];
}
//puts(key1);
int n=0;
for(int i=0;i<lengthscours;i++)//在字母表alpha中找到要加密的字符串
{
for(int j=0;j<26;j++)
{
if(scours[i]==alpha[j])
{
new[n]=key1[j];//找到之后输出和字母表元素位置相同的key1的字符,给到new
n++;
}
}
}
for(int i=0;i<lengthscours;i++)//输出new中的字符
{
printf("%c",new[i]);
}
printf("\n");
}
return 0;
}