//密鑰短語密碼,密鑰不能太長!!vc++6.0成功 c++
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int str_len(char *str)
{
int len = 0;
while(*(str++))
len++;
return len;
} 數據結構
int main(int argc, char *argv[])
{
char *str=NULL;
str=(char*)malloc(127);
printf("請輸入密鑰必須大寫字母(得修正):");
gets(str);
int s = str_len(str);
int v=s;
//重複字母替換成#號
for(int i = 0;i<s-1;i++)
for(int j = i+1;j<s;j++)
{
if(str[i]==str[j])
{
str[j]='#';
}
}
// printf("%s\n",str);
char *p=str;
//將#號刪除,像數據結構中的順序表,覆蓋前面的。
while(*p != '\0')
{
if(*p=='#')
{
while(*p != '\0')
{
*p=*(p+1);
p++;
}
p=str;//指針清零,這塊想了很久一直BUG 加密
}
else p++;
}
//處理最後一個字母是重複的狀況
if(str[str_len(str)-1]=='#')
str[str_len(str)-1]=NULL;
//輸出刪除後的字符
// printf("輸出刪除後的字符:");
// printf("%s\n",str);
int e = str_len(str);
int f=e;
char a[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
char b[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
for(int o = 0;o<25;o++)
for(int j = 0;j<e;j++)
{
if(b[o]==str[j])
{
b[o]='#';
}
}
// printf("%s\n",str);
char *pp=b;
//將#號刪除,像數據結構中的順序表,覆蓋前面的。
while(*pp != '\0')
{
if(*pp=='#')
{
while(*pp != '\0')
{
*pp=*(pp+1);
pp++;
}
pp=b;//指針清零,這塊想了很久一直BUG 指針
}
else pp++;
}
//處理最後一個字母是重複的狀況
if(b[25]=='#')
b[25]=NULL;
// printf("%s\n",str);
// printf("去除與str相同的字母");
// printf("%s\n",b);
char *ss;
ss=(char*)malloc(27);
int t;
memset(ss,'0',26);
ss[26]=NULL; get
for(i=0;i<str_len(str);i++,s++)
{
ss[s] = str[i];
// printf("i=...%d,s=...%d\n",i,s);
}
t=s;
// printf("t=%d",t);
// printf("把str放入ss中....:");
// printf("%s\n",ss);
for(i = 0;i<26-t;i++,s++)
{
ss[s] = b[i];
}
//printf("把b一部分放入ss中....:");
// printf("%s\n",ss);
// printf("i....=%d",i);
for(int j=0;j<v;i++,j++)
{
ss[j]=b[i];
// printf("B....%c,",b[j]);
// printf("SS...,,",ss[j]);
// printf("%s\n",ss);
}
//輸出加密後的字母表
// printf("把b另外一部分放入ss中....:");
// for(int w=0;w<26;w++)
// printf("%c",ss[w]);
// printf("\n");
//對輸入的內容進行操做
char sstr[50];
printf("請輸入正文(必須是小寫字母待修正) :");
gets(sstr);
int len = str_len(sstr);
for( i = 0;i<len;i++)
for(int j=0;j<26;j++)
{
if(sstr[i]==a[j])
sstr[i]=ss[j];
else
sstr[i]=sstr[i];
}
printf("加密結果爲:");
printf("%s\n",sstr);
return 0;
} string
/*
昨天寫的。寫的不是很完善,但願提出改進意見。 io
*/ gc