MATLAB - Ciągi
Tworzenie ciągu znaków w MATLAB-ie jest dość proste. W rzeczywistości używaliśmy go wiele razy. Na przykład wpisujesz w wierszu polecenia -
my_string = 'Tutorials Point'
MATLAB wykona powyższą instrukcję i zwróci następujący wynik -
my_string = Tutorials Point
MATLAB traktuje wszystkie zmienne jako tablice, a ciągi znaków są traktowane jako tablice znaków. Użyjmywhos polecenie sprawdzenia zmiennej utworzonej powyżej -
whos
MATLAB wykona powyższą instrukcję i zwróci następujący wynik -
Name Size Bytes Class Attributes
my_string 1x16 32 char
Co ciekawe, możesz użyć funkcji konwersji liczb, takich jak uint8 lub uint16aby przekonwertować znaki w ciągu na ich kody numeryczne. Plikchar funkcja konwertuje wektor liczb całkowitych z powrotem na znaki -
Przykład
Utwórz plik skryptu i wpisz w nim następujący kod -
my_string = 'Tutorial''s Point';
str_ascii = uint8(my_string) % 8-bit ascii values
str_back_to_char= char(str_ascii)
str_16bit = uint16(my_string) % 16-bit ascii values
str_back_to_char = char(str_16bit)
Po uruchomieniu pliku wyświetla następujący wynik -
str_ascii =
84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116
str_back_to_char = Tutorial's Point
str_16bit =
84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116
str_back_to_char = Tutorial's Point
Prostokątna tablica znaków
Ciągi, które omówiliśmy do tej pory, to jednowymiarowe tablice znaków; jednak musimy przechowywać więcej niż to. Musimy przechowywać bardziej wymiarowe dane tekstowe w naszym programie. Osiąga się to poprzez tworzenie prostokątnych tablic znaków.
Najprostszym sposobem tworzenia prostokątnej tablicy znaków jest konkatenacja dwóch lub więcej jednowymiarowych tablic znaków, w pionie lub w poziomie, zgodnie z wymaganiami.
Ciągi można łączyć w pionie na jeden z następujących sposobów -
Korzystanie z operatora konkatenacji MATLAB []i oddzielając każdy wiersz średnikiem (;). Należy pamiętać, że w tej metodzie każdy wiersz musi zawierać taką samą liczbę znaków. W przypadku łańcuchów o różnych długościach należy uzupełnić znaki spacjami w razie potrzeby.
Używając charfunkcjonować. Jeśli łańcuchy mają różne długości, krótsze ciągi znaków wypełnia spacjami końcowymi, tak aby każdy wiersz miał taką samą liczbę znaków.
Przykład
Utwórz plik skryptu i wpisz w nim następujący kod -
doc_profile = ['Zara Ali '; ...
'Sr. Surgeon '; ...
'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
'RN Tagore Cardiology Research Center')
Po uruchomieniu pliku wyświetla następujący wynik -
doc_profile =
Zara Ali
Sr. Surgeon
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali
Sr. Surgeon
RN Tagore Cardiology Research Center
Ciągi można łączyć w poziomie na jeden z następujących sposobów -
Korzystając z operatora konkatenacji MATLAB, []i oddzielając ciągi wejściowe przecinkiem lub spacją. Ta metoda zachowuje wszelkie spacje końcowe w tablicach wejściowych.
Korzystając z funkcji konkatenacji ciągów, strcat. Ta metoda usuwa końcowe spacje z danych wejściowych.
Przykład
Utwórz plik skryptu i wpisz w nim następujący kod -
name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)
Po uruchomieniu pliku wyświetla następujący wynik -
profile = Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center
profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center
Łączenie ciągów w tablicę komórek
Z naszej poprzedniej dyskusji jasno wynika, że łączenie łańcuchów o różnych długościach może być uciążliwe, ponieważ wszystkie ciągi w tablicy muszą mieć tę samą długość. Użyliśmy spacji na końcu ciągów, aby wyrównać ich długość.
Jednak bardziej wydajnym sposobem łączenia ciągów jest konwersja wynikowej tablicy na tablicę komórek.
Tablica komórek MATLAB może zawierać różne rozmiary i typy danych w tablicy. Macierze komórek zapewniają bardziej elastyczny sposób przechowywania ciągów o różnej długości.
Plik cellstr funkcja konwertuje tablicę znaków na tablicę komórek zawierającą ciągi.
Przykład
Utwórz plik skryptu i wpisz w nim następujący kod -
name = 'Zara Ali ';
position = 'Sr. Surgeon ';
worksAt = 'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)
Po uruchomieniu pliku wyświetla następujący wynik -
{
[1,1] = Zara Ali
[2,1] = Sr. Surgeon
[3,1] = R N Tagore Cardiology Research Center
}
Funkcje ciągów w MATLAB
MATLAB zapewnia liczne funkcje ciągów do tworzenia, łączenia, analizowania, porównywania i manipulowania napisami.
Poniższa tabela zawiera krótki opis funkcji tekstowych w MATLAB -
Funkcjonować | Cel, powód |
---|---|
Funkcje do przechowywania tekstu w tablicach znaków, łączenia tablic znaków itp. | |
puste miejsca | Utwórz ciąg pustych znaków |
cellstr | Utwórz tablicę komórek zawierającą ciągi znaków z tablicy znaków |
zwęglać | Konwertuj na tablicę znaków (ciąg) |
iscellstr | Określ, czy dane wejściowe to tablica komórek zawierająca ciągi |
ischar | Określ, czy element jest tablicą znaków |
sprintf | Sformatuj dane w ciąg |
strcat | Połącz łańcuchy w poziomie |
strjoin | Połącz ciągi w tablicy komórek w jeden ciąg |
Funkcje do identyfikowania części łańcuchów, znajdowania i zastępowania podciągów | |
ischar | Określ, czy element jest tablicą znaków |
isletter | Elementy tablicy, które są literami alfabetu |
isspace | Elementy tablicy, które są znakami spacji |
isstrprop | Określ, czy ciąg należy do określonej kategorii |
sscanf | Odczytaj sformatowane dane z ciągu |
strfind | Znajdź jeden ciąg w innym |
strrep | Znajdź i zamień podciąg |
strsplit | Podziel ciąg na określonym separatorze |
strtok | Wybrane części struny |
validatestring | Sprawdź poprawność ciągu tekstowego |
symvar | Określ zmienne symboliczne w wyrażeniu |
regexp | Dopasuj wyrażenie regularne (z uwzględnieniem wielkości liter) |
regexpi | Dopasuj wyrażenie regularne (bez rozróżniania wielkości liter) |
regexprep | Zastąp ciąg przy użyciu wyrażenia regularnego |
regexptranslate | Przetłumacz ciąg na wyrażenie regularne |
Funkcje do porównywania ciągów | |
strcmp | Porównaj ciągi (z uwzględnieniem wielkości liter) |
strcmpi | Porównaj ciągi (bez rozróżniania wielkości liter) |
strncmp | Porównaj pierwsze n znaków ciągów (z uwzględnieniem wielkości liter) |
strncmpi | Porównaj pierwsze n znaków ciągów (bez rozróżniania wielkości liter) |
Funkcje zmieniające łańcuch znaków na wielkie lub małe litery, tworzenie lub usuwanie białych znaków | |
usuń puste | Usuń końcowe spacje z końca ciągu |
strtrim | Usuń wiodące i końcowe białe znaki z ciągu |
niższy | Konwertuj ciąg na małe litery |
górny | Konwertuj ciąg na wielkie litery |
strjust | Wyjustuj tablicę znaków |
Przykłady
Poniższe przykłady ilustrują niektóre z wyżej wymienionych funkcji tekstowych -
Ciągi formatujące
Utwórz plik skryptu i wpisz w nim następujący kod -
A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)
Po uruchomieniu pliku wyświetla następujący wynik -
ans = 3141.592654
3141.59
+3141.59
3141.59
000003141.59
Łączenie ciągów
Utwórz plik skryptu i wpisz w nim następujący kod -
%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};
% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")
Po uruchomieniu pliku wyświetla następujący wynik -
str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange
Znajdowanie i zastępowanie ciągów
Utwórz plik skryptu i wpisz w nim następujący kod -
students = {'Zara Ali', 'Neha Bhatnagar', ...
'Monica Malik', 'Madhu Gautam', ...
'Madhu Sharma', 'Bhawna Sharma',...
'Nuha Ali', 'Reva Dutta', ...
'Sunaina Ali', 'Sofia Kabir'};
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)
Po uruchomieniu pliku wyświetla następujący wynik -
new_student =
{
[1,1] = Poulomi Dutta
}
first_names =
{
[1,1] = Zara
[1,2] = Neha
[1,3] = Monica
[1,4] = Madhu
[1,5] = Madhu
[1,6] = Bhawna
[1,7] = Nuha
[1,8] = Reva
[1,9] = Sunaina
[1,10] = Sofia
}
Porównywanie ciągów
Utwórz plik skryptu i wpisz w nim następujący kod -
str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
sprintf('%s and %s are equal', str1, str2)
else
sprintf('%s and %s are not equal', str1, str2)
end
Po uruchomieniu pliku wyświetla następujący wynik -
str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal