Вопрос:

Преобразование букв в алфавит НАТО в MATLAB

string matlab replace alphabet

480 просмотра

1 ответ

13 Репутация автора

Я хочу написать код в MATLAB, который преобразует буквы в алфавит НАТО. Например, слово « привет » будет переписано как Hotel-Echo-Lima-Lima-Oscar . У меня были некоторые проблемы с кодом. Пока у меня есть следующее:

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

Я знаю, что приведенный выше код является беспорядком, и я немного сомневаюсь, что на самом деле я делал. Есть кто-нибудь, кто знает лучший способ сделать это? Могу ли я изменить приведенный выше код, чтобы он работал?

Это потому, что теперь, когда я запускаю код, я получаю пустой график, который я не знаю почему, потому что я не просил график в каких-либо строках.

Автор: captain1 Источник Размещён: 08.11.2017 10:21

Ответы (1)


2 плюса

120121 Репутация автора

Решение

Вы можете сделать ваше преобразование в одну строку. Учитывая ваш строковый массив natalph :

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

И результат:

natoText = 

  string

    "Hotel-Echo-Lima-Lima-Oscar"

При этом используется хитрость, заключающаяся в том, что символьные массивы можно рассматривать как числовые массивы их эквивалентных значений ASCII . Код char(lower(plaintext))-96преобразуется plaintextв нижний регистр , затем в массив символов (если он еще не существует) и неявно преобразует его в числовой вектор значений ASCII, вычитая 96. Поскольку 'a'он равен 97, это создает индексный вектор, содержащий значения 1 ( 'a') через 26 ( 'z'). Это используется для индексации массива строк natalph, и они затем объединяются с дефисами.

Автор: gnovice Размещён: 08.11.2017 10:40
Вопросы из категории :
32x32