morsecode=morse('matlabsky baidu wacs5',0) %編碼
srccode=morse(morsecode,1) %解碼
morsecode(2)='.'; %修改碼
srccode=morse(morsecode,1) %錯誤的morse碼進行解碼
=============以下是m文件==========
function Dst=morse(Src,Flag)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Author : wacs5
%%Email : wacs5@126.com
%%Date : 20101031
%%Function : morse(莫斯密碼)編碼和解碼
%%Argument : Src為待編碼/解碼的字符串
%% : Flag=0為編碼,Flag=1為解碼
%%Return : Dst為完成的編碼/解碼的字符串
%%Called Mtb : disp,find,isempty,isequal,length,nargin,strrep,warning
%%Example:
%% : morsecode=morse('matlabsky baidu wacs5',0)
%% : srccode=morse(morsecode,1)
%% : morsecode(2)='.'; srccode=morse(morsecode,1) %錯誤的morse碼
%%See also :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin==1
Flag=0; %缺省為編碼
end
Dst=[];
SrcAlpha=['A':'Z','1':'9','0']; %原始字母
EncAlpha={'.-','-...','-.-.','-..','.','..-.','――.','....','..','.―――','-.-','.-..','――','-.','―――','.――.','――.-','.-.','...','-','..-','...-','.――','-..-','-.――','――..','.――――','..―――','...――','....-','.....','-....','――...','―――..','――――.','―――――'}; %相應的morse碼
if Flag==0
disp('Encoding'); %編碼
for i=1:length(Src)
if Src(i)>='a' && Src(i)<='z' %小寫轉大寫
Src(i)=Src(i)-32;
end
index=find(SrcAlpha==Src(i)); %查找待編碼字母在SrcAlpha中的位置
if isempty(index) %不在字典中
Dst=[Dst,' ']; %兩個空格。因為字母後面已經有壹空格
else
Dst=[Dst,EncAlpha{index},' ']; %每個morse碼後加壹空格
end
end
else
disp('Decoding'); %解碼
if Src(end)~=' ' %最後壹個不是空格,添加壹個空格,僅為了方便編程
Src(end+1)=' ';
end
SpaceIndex=find(Src==' '); %找出所有空格位置
SpaceIndex=[0,SpaceIndex]; %將0加入,也僅僅是為了方便編程
for i=1:length(SpaceIndex)-1
Code=Src(SpaceIndex(i)+1:SpaceIndex(i+1)-1);%獲得morse密文
if isempty(Code) %連續兩個空格
Dst=[Dst,' ']; %譯文也為空格
else
found=0; %是否在morse編碼字典中存在
for j=1:length(EncAlpha)
if (isequal(EncAlpha{j},Code)) %在morse編碼字典中找到
found=1;
break;
end
end
if found==0 %morse編碼字典中沒有找到,有誤
Dst=[Dst,'*'];
warning(['Input Code frag "',Code,'" wrong']);
else
Dst=[Dst,SrcAlpha(j)]; %相應的原文
end
end
end
Dst=strrep(Dst,' ',' '); %多空格合為壹個空格
end