Почему нарезка строк приводит к такому результату?(MATLAB) - PullRequest
0 голосов
/ 13 октября 2018

Мне удалось сделать круговое смещение символов путем среза строки и использовать метод strcat (), чтобы объединить 2 фрагмента.

Вот мой пример кода:

>> a = '917'
>> b = strcat(a(2:1:3) ,a(1:1:1))
   b =
       '179'

Однако,Однажды я попробовал следующий код и случайно получил следующий результат ... Двойной массив 1X2.

>> b = a(2:1:3) + a(1:1:1)
   b =
       106   112

Может кто-нибудь помочь мне объяснить вывод?Почему b = [106 112]?THX!

1 Ответ

0 голосов
/ 13 октября 2018

То, что у вас есть массив символов , а не строки ;Строки - это довольно новый класс в MATLAB, определенный с помощью двойных кавычек.Но символьные массивы в основном представляют собой числовой массив кодовых точек ASCII (или, точнее, UTF-16) под капотом.

strcat по определению объединяет символьные массивы (или строки).Это эквивалентно синтаксису объединения обычных массивов:

>> strcat('17', '9')

ans =

    '179'

>> ['17', '9']      

ans =

    '179'

Однако любая арифметическая операция приведет к тому, что массивы символов станут базовым целочисленным массивом:

>> +'179'      

ans =

    49    55    57

Эти числа являются кодовыми точками ASCII.для 1, 7 и 9 соответственно.ASCII является подмножеством UTF-16, поэтому для чисел, английских букв и знаков препинания достаточно думать в терминах кодовых точек ASCII.

Теперь вы поймете, почему добавление двухсимвольных массивов будет выполнять соответствующую операцию, котораядобавляет числовые массивы:

>> '17' + '9'

ans =

   106   112

>> [49 55] + [57]

ans =

   106   112

Выше также означает, что вам не повезло.Если бы два символьных массива имели несовместимый размер (т. Е. Если бы их размер был неравным и ни один из них не имел длины 1), вы бы получили сообщение об ошибке:

>> '12' + '345'
Matrix dimensions must agree.

Поскольку вы не можете добавить 2-длинуи вектор 3 длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...