# include & ltstdio.h & gt
# include & ltstdlib.h & gt
#定義?n?10//字符數
#定義?鑰匙?6//鍵(1~n)
int?makePassword(char?*word,char?*密碼)
{
int?I = 0;//遍歷原始數組的下標
int?檢查[n-1];//標記是否被訪問。
int?start = 0;//指向當前插入原始字符串的位置。
int?pos = 0;//指向密文數組中的插入位置。
for(I = 0;我& ltn-1;i++)?檢查[我]?=?0;//初始化為未訪問
if(key & lt;0 | | key & gt=n-1)?回歸?0;//鍵越界,無法返回。
I = 0;
while(start & lt;n-1)
{
If(0 = = check[I])//如果沒有標記,pos開始計數(跳過存儲值的位置)。
{
//printf(" check[% d]= % d \ n ",I,check[I]);//為了測試,可以查看標記的內容。
if(++pos==key)
{
//printf(" pos = % d,password[%d]=%c\n ",pos,I,word[start]);//為了測試,可以查看原始數組中插入點的存儲值和對應的下標值。
pos?=?0;
密碼[i]?=?word[start++];
檢查[我]?=?1;//標記為已訪問
}
}
if(i==n-2)?I = 0;//因為word[n-1]是終止符,所以不參與循環,也就是在記住最後壹個字母的時候再開始遍歷原數組。
不然呢?i++;
}
密碼[n-1]= ' \ 0 ';//帶終止符的密文結尾
回歸?1;
}
int?主()
{
夏爾?word[n]="it '太守",密碼[n];//註意,字符串長度應該等於n-1,為終止符' \0 '留壹個。
If (make password (word,password)= = 1)//轉換成功則打印。
printf(" original:% s \ n cipher text:% s \ n ",word,password);
回歸?0;
}