Сравнение текста в массивах символов и строковых массивах различными способами. В R2016b году были введены строковые массивы. Можно сравнить массивы строк и векторы символов с реляционными операторами и с помощью strcmp функция. Можно сортировать массивы строк с помощью sort функция, точно так же, как можно сортировать массивы любого другого типа. MATLAB ® также предоставляет функции для проверки символов в фрагментах текста. Например, можно определить, какие символы в символьном векторе или строковом массиве являются буквами или пробелами.
Можно сравнить массивы строк для равенства с реляционными операторами == и ~=. При сравнении строковых массивов выходные данные представляют собой логический массив, имеющий 1 где отношение истинно, и 0 где это неправда.
Создайте два строковых скаляра. Начиная с R2017a, можно создавать строки с помощью двойных кавычек.
str1 = "Hello"; str2 = "World"; str1,str2
str1 = "Hello"
str2 = "World"
Выдержать сравнение str1 и str2 за равенство.
str1 == str2
ans = logical
0
Сравните строковый массив с несколькими элементами со строковым скаляром.
str1 = ["Mercury","Gemini","Apollo";... "Skylab","Skylab B","International Space Station"]; str2 = "Apollo"; str1 == str2
ans = 2x3 logical array
0 0 1
0 0 0
Сравнение строкового массива с символьным вектором. Если одна из переменных является строковым массивом, можно выполнить сравнение.
chr = 'Gemini';
TF = (str1 == chr)TF = 2x3 logical array
0 1 0
0 0 0
Проиндексировать в str1 с TF для извлечения соответствующих строковых элементов Gemini. Для индексирования в массив можно использовать логические массивы.
str1(TF)
ans = "Gemini"
Сравнить для неравенства с помощью ~= оператор. Проиндексировать в str1 для извлечения элементов, которые не совпадают 'Gemini'.
TF = (str1 ~= chr)
TF = 2x3 logical array
1 0 1
1 1 1
str1(TF)
ans = 5x1 string
"Mercury"
"Skylab"
"Skylab B"
"Apollo"
"International Space Station"
Сравните два нескалярных массива строк. При сравнении двух нескалярных массивов их размер должен быть одинаковым.
str2 = ["Mercury","Mars","Apollo";... "Jupiter","Saturn","Neptune"]; TF = (str1 == str2)
TF = 2x3 logical array
1 0 1
0 0 0
Проиндексировать в str1 для извлечения совпадений.
str1(TF)
ans = 2x1 string
"Mercury"
"Apollo"
Можно также сравнить строки с реляционными операторами >, >=, <, и <=. Строки, начинающиеся с прописных букв, начинаются со строчных букв. Например, строка "ABC" меньше, чем "abc". Цифры и некоторые знаки препинания также приходят перед буквами.
"ABC" < "abc"
ans = logical
1
Сравнить строковый массив, содержащий имена, с другим именем с > оператор. Имена Sanchez, de Ponte, и Nash приходите после Matthews, потому что S, d, и N все больше, чем M.
str = ["Sanchez","Jones","de Ponte","Crosby","Nash"]; TF = (str > "Matthews")
TF = 1x5 logical array
1 0 1 0 1
str(TF)
ans = 1x3 string
"Sanchez" "de Ponte" "Nash"
Можно сортировать массивы строк. MATLAB ® сохраняет символы как Unicode ®, используя UTF-16 схему кодирования символов. Символьные и строковые массивы сортируются в соответствии с порядком UTF-16 кодовых точек. Для символов, которые также являются символами ASCII, этот порядок означает, что буквы верхнего регистра приходят перед строчными буквами. Цифры и некоторые знаки препинания также приходят перед буквами.
Сортировка массива строк str.
sort(str)
ans = 1x5 string
"Crosby" "Jones" "Nash" "Sanchez" "de Ponte"
Сортировка массива строк 2 на 3. sort функция сортирует элементы в каждом столбце по отдельности.
sort(str2)
ans = 2x3 string
"Jupiter" "Mars" "Apollo"
"Mercury" "Saturn" "Neptune"
Для сортировки элементов в каждой строке выполните сортировку str2 вдоль второго размера.
sort(str2,2)
ans = 2x3 string
"Apollo" "Mars" "Mercury"
"Jupiter" "Neptune" "Saturn"
Можно сравнивать символьные векторы и массивы ячеек символьных векторов друг с другом. Используйте strcmp функция для сравнения двух символьных векторов, или strncmp для сравнения первого N персонажи. Вы также можете использовать strcmpi и strncmpi для сравнения без учета регистра.
Сравнение двух символьных векторов с strcmp функция. chr1 и chr2 не равны.
chr1 = 'hello'; chr2 = 'help'; TF = strcmp(chr1,chr2)
TF = logical
0
Обратите внимание, что MATLAB strcmp отличается от версии C strcmp. Версия C strcmp прибыль 0 когда два символьных массива одинаковы, а не различны.
Сравните первые два символа с strncmp функция. TF является 1 потому что оба вектора символов начинаются с символов he.
TF = strncmp(chr1,chr2,2)
TF = logical
1
Сравнение двух массивов ячеек символьных векторов. strcmp возвращает логический массив того же размера, что и массивы ячеек.
C1 = {'pizza'; 'chips'; 'candy'};
C2 = {'pizza'; 'chocolate'; 'pretzels'};
strcmp(C1,C2)ans = 3x1 logical array
1
0
0
Можно проверить символы в строковых или символьных массивах с помощью isstrprop, isletter, и isspace функции.
isstrprop проверяет символы в строковых или символьных массивах.
isletter и isspace функции проверяют символы только в символьных массивах.
Определите, какие символы в символьном векторе являются пробелами. isspace возвращает логический вектор того же размера, что и chr.
chr = 'Four score and seven years ago';
TF = isspace(chr)TF = 1x30 logical array
0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
isstrprop функция может запрашивать символы для множества различных признаков. isstrprop может определить, являются ли символы в строковом или символьном векторе буквами, буквенно-цифровыми символами, десятичными или шестнадцатеричными цифрами или знаками препинания.
Определите, какие символы в строке являются знаками препинания. isstrprop возвращает логический вектор, длина которого равна числу символов в str.
str = "A horse! A horse! My kingdom for a horse!"str = "A horse! A horse! My kingdom for a horse!"
isstrprop(str,"punct")ans = 1x41 logical array
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Определение символов в символьном векторе chr это буквы.
isstrprop(chr,"alpha")ans = 1x30 logical array
1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1
eq | ge | gt | isletter | isspace | isstrprop | le | lt | ne | sort | strcmp