Search code examples
stringmatlabreplacealphabet

Converting letters into NATO alphabet in MATLAB


I want to write a code in MATLAB that converts a letter into NATO alphabet. Such as the word 'hello' would be re-written as Hotel-Echo-Lima-Lima-Oscar. I have been having some trouble with the code. So far I have the following:

function natoText = textToNato(plaintext)
plaintext = lower(plaintext);
r = zeros(1, length(plaintext))

%Define my NATO alphabet
natalph = ["Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf", ...
    "Hotel","India","Juliet","Kilo","Lima","Mike","November","Oscar", ...
    "Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor",...
    "Whiskey","Xray","Yankee","Zulu"];

%Define the normal lower alphabet
noralpha = ['a' : 'z'];

%Now we need to make a loop for matlab to check for each letter
for i = 1:length(text)
    for j = 1:26
        n = r(i) == natalph(j);
        if noralpha(j) == text(i) : n
        else r(i) = r(i)
            natoText = ''
        end
    end
end

for v = 1:length(plaintext)
    natoText = natoText + r(v) + ''
    natoText = natoText(:,-1)
end
end

I know the above code is a mess and I am a bit in doubt what really I have been doing. Is there anyone who knows a better way of doing this? Can I modify the above code so that it works?

It is because now when I run the code, I am getting an empty plot, which I don't know why because I have not asked for a plot in any lines.


Solution

  • You can actually do your conversion in one line. Given your string array natalph:

    plaintext = 'hello';  % Your input; could also be "hello"
    natoText = strjoin(natalph(char(lower(plaintext))-96), '-');
    

    And the result:

    natoText = 
    
      string
    
        "Hotel-Echo-Lima-Lima-Oscar"
    

    This uses a trick that character arrays can be treated as numeric arrays of their ASCII equivalent values. The code char(lower(plaintext))-96 converts plaintext to lowercase, then to a character array (if it isn't already) and implicitly converts it to a numeric vector of ASCII values by subtracting 96. Since 'a' is equal to 97, this creates an index vector containing the values 1 ('a') through 26 ('z'). This is used to index the string array natalph, and these are then joined together with hyphens.