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