資源描述:
《字符串應(yīng)用編碼解碼.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、字符串應(yīng)用:編碼解碼【題目】從鍵盤輸入一個(gè)英文句子,設(shè)計(jì)一個(gè)編碼、解碼程序。編碼過程:先鍵入一個(gè)正整數(shù)N(1〈=N〉=26)。這個(gè)N決定了轉(zhuǎn)換關(guān)系。例如當(dāng)N=1,輸入的句子為ABCXYZ時(shí),則其轉(zhuǎn)換碼為ABCXYZ不變。當(dāng)N=2時(shí),其轉(zhuǎn)換碼為BCDYZA,其它的非字母字符不變。為使編碼較于破譯,將轉(zhuǎn)換碼的信息自左而右兩兩交換,若最后僅剩單個(gè)字符則不換。然后,將一開始表示轉(zhuǎn)換關(guān)系的N根據(jù)ascii表序號(hào)化成大寫字母放在最前面。如:abcABCxyzXYZ-/,1.n=3①cdeCDEzabZAB-/,1.{根據(jù)N的值轉(zhuǎn)換}②dcCeEDazZbBA/-1,.{兩兩交換}
2、③CdcCeEDazZbBA/-1,.{最后編碼}解碼過程為編碼的逆過程?!緟⒖汲绦颉縱arone:string;i,what,n,temp,s:integer;temp1:char;beginwriteln('inputyourchoice:');{編碼,解碼過程通過菜單選擇}writeln('1.bianma');{選1,編碼}writeln('2.jiema');{選2,解碼}readln(what);{輸入選擇}writeln('inputastring:');{無論是編碼或是解碼,均要輸入一字符串}readln(one);{讀入字符串到one中}ifwhat
3、=1thenbegin{如果是編碼過程}readln(n);{讀入N}n:=n-1;{根據(jù)題意,要換成N-1,為什么?例如N=1,則字符不變}fori:=1tolength(one)dobegin{字串one從頭到尾編碼}iford(one[i])in[65..90]thenbegin{如為大寫字母}temp:=ord(one[i])+n;{序號(hào)先加N}iftemp>90thentemp:=temp-90+64;{超過Z的處理,保證處理后仍為}one[i]:=chr(temp);{大寫字母}end;iford(one[i])in[97..122]thenbegin{如
4、為小寫字母}temp:=ord(one[i])+n;iftemp>122thentemp:=temp-122+96;{超過z的處理,保證為小寫字母}one[i]:=chr(temp);{處理后放回原位置}end;end;s:=ord(one[0]);{S放one字符串長(zhǎng)度,用以控制兩兩交換次數(shù)}ifodd(s)thendec(s);{假如是奇數(shù),則減1,保證是偶數(shù)次}i:=1;repeattemp1:=one[i];{以下三句實(shí)現(xiàn)前后兩字符的兩兩交換}one[i]:=one[i+1];one[i+1]:=temp1;i:=i+2;{一次便交換兩個(gè)字符}untili>=
5、s;{直到字串結(jié)束}write(chr(ord(n+1+64)));{輸出N的對(duì)應(yīng)大寫字母}write(one);{輸出編碼后的one字符串}end;?ifwhat=2thenbegin{解碼過程}n:=ord(upcase(one[1]))-64-1;{由one字串的頭一個(gè)字符獲取密鑰N}one:=copy(one,2,length(one)-1);{取出N后,one字符串減去第一個(gè)字符}s:=ord(one[0]);{以下實(shí)現(xiàn)字符串的兩兩交換}ifodd(s)thendec(s);{S控制兩兩交換的次數(shù),保證是偶數(shù)次}i:=1;repeattemp1:=one[i
6、];{前后兩個(gè)字符兩兩交換}one[i]:=one[i+1];one[i+1]:=temp1;i:=i+2;untili>=s;{直到字串結(jié)束}fori:=1tolength(one)dobegin{根據(jù)N的值還原字符串}iford(one[i])in[65..90]thenbegin{大寫字母}temp:=ord(one[i])-n;{序號(hào)-N}iftemp<65thentemp:=temp+26;{保證在A..Z范圍內(nèi)轉(zhuǎn)換}one[i]:=chr(temp);{轉(zhuǎn)換后放回原處}end;iford(one[i])in[97..122]thenbegin{小寫字母}t
7、emp:=ord(one[i])-n;iftemp<97thentemp:=temp+26;one[i]:=chr(temp);end;end;writeln(one);{輸出解碼后的字符串}end;end.