MATLAB - Chuỗi

Tạo một chuỗi ký tự khá đơn giản trong MATLAB. Trong thực tế, chúng tôi đã sử dụng nó nhiều lần. Ví dụ, bạn nhập dòng lệnh sau vào dấu nhắc lệnh:

my_string = 'Tutorials Point'

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

my_string = Tutorials Point

MATLAB coi tất cả các biến là mảng và chuỗi được coi là mảng ký tự. Hãy để chúng tôi sử dụngwhos lệnh để kiểm tra biến được tạo ở trên -

whos

MATLAB sẽ thực hiện câu lệnh trên và trả về kết quả sau:

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

Điều thú vị là bạn có thể sử dụng các hàm chuyển đổi số như uint8 hoặc là uint16để chuyển đổi các ký tự trong chuỗi thành mã số của chúng. Cácchar hàm chuyển đổi vectơ số nguyên trở lại các ký tự -

Thí dụ

Tạo một tệp script và nhập mã sau vào đó:

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)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

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

Mảng ký tự hình chữ nhật

Các chuỗi mà chúng ta đã thảo luận cho đến nay là các mảng ký tự một chiều; tuy nhiên, chúng ta cần lưu trữ nhiều hơn thế. Chúng ta cần lưu trữ nhiều dữ liệu dạng văn bản hơn trong chương trình của mình. Điều này đạt được bằng cách tạo các mảng ký tự hình chữ nhật.

Cách đơn giản nhất để tạo mảng ký tự hình chữ nhật là nối hai hoặc nhiều mảng ký tự một chiều, theo chiều dọc hoặc chiều ngang theo yêu cầu.

Bạn có thể kết hợp các chuỗi theo chiều dọc theo một trong các cách sau:

  • Sử dụng toán tử nối MATLAB []và ngăn cách mỗi hàng bằng dấu chấm phẩy (;). Xin lưu ý rằng trong phương pháp này mỗi hàng phải chứa cùng một số ký tự. Đối với các chuỗi có độ dài khác nhau, bạn nên đệm bằng các ký tự khoảng trắng nếu cần.

  • Sử dụng charchức năng. Nếu các chuỗi có độ dài khác nhau, ký tự đệm các chuỗi ngắn hơn bằng khoảng trống ở cuối để mỗi hàng có cùng số ký tự.

Thí dụ

Tạo một tệp script và nhập mã sau vào đó:

doc_profile = ['Zara Ali                             '; ...
               'Sr. Surgeon                          '; ...
               'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
                  'RN Tagore Cardiology Research Center')

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

doc_profile =
Zara Ali                             
Sr. Surgeon                          
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali                            
Sr. Surgeon                         
RN Tagore Cardiology Research Center

Bạn có thể kết hợp các chuỗi theo chiều ngang theo một trong các cách sau:

  • Sử dụng toán tử nối MATLAB, []và phân tách các chuỗi đầu vào bằng dấu phẩy hoặc dấu cách. Phương thức này bảo toàn bất kỳ khoảng trống nào trong các mảng đầu vào.

  • Sử dụng hàm nối chuỗi, strcat. Phương pháp này loại bỏ khoảng trống ở cuối trong các đầu vào.

Thí dụ

Tạo một tệp script và nhập mã sau vào đó:

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

profile = Zara Ali      , Sr. Surgeon      , R N Tagore Cardiology Research Center
profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center

Kết hợp các chuỗi thành một mảng ô

Từ cuộc thảo luận trước đây của chúng tôi, rõ ràng là việc kết hợp các chuỗi có độ dài khác nhau có thể là một vấn đề khó khăn vì tất cả các chuỗi trong mảng phải có cùng độ dài. Chúng tôi đã sử dụng khoảng trắng ở cuối các chuỗi để cân bằng độ dài của chúng.

Tuy nhiên, một cách hiệu quả hơn để kết hợp các chuỗi là chuyển đổi mảng kết quả thành một mảng ô.

Mảng ô MATLAB có thể chứa các kích thước và kiểu dữ liệu khác nhau trong một mảng. Mảng ô cung cấp một cách linh hoạt hơn để lưu trữ các chuỗi có độ dài khác nhau.

Các cellstr hàm chuyển đổi một mảng ký tự thành một mảng ô chuỗi.

Thí dụ

Tạo một tệp script và nhập mã sau vào đó:

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

{                                                                               
   [1,1] = Zara Ali                                                              
   [2,1] = Sr. Surgeon                                                           
   [3,1] = R N Tagore Cardiology Research Center                                 
}

Các hàm chuỗi trong MATLAB

MATLAB cung cấp nhiều hàm chuỗi tạo, kết hợp, phân tích cú pháp, so sánh và thao tác các chuỗi.

Bảng sau cung cấp mô tả ngắn gọn về các hàm chuỗi trong MATLAB:

Chức năng Mục đích
Các chức năng lưu trữ văn bản trong mảng ký tự, kết hợp mảng ký tự, v.v.
khoảng trống Tạo chuỗi ký tự trống
cellstr Tạo mảng ô của chuỗi từ mảng ký tự
char Chuyển đổi thành mảng ký tự (chuỗi)
iscellstr Xác định xem đầu vào có phải là mảng ô của chuỗi không
ischar Xác định xem mục có phải là mảng ký tự không
chạy nước rút Định dạng dữ liệu thành chuỗi
strcat Nối các chuỗi theo chiều ngang
strjoin Nối các chuỗi trong mảng ô thành chuỗi đơn
Chức năng xác định các phần của chuỗi, tìm và thay thế chuỗi con
ischar Xác định xem mục có phải là mảng ký tự không
bản tin Các phần tử mảng là các chữ cái trong bảng chữ cái
isspace Các phần tử mảng là các ký tự khoảng trắng
isstrprop Xác định xem chuỗi có thuộc danh mục được chỉ định hay không
sscanf Đọc dữ liệu được định dạng từ chuỗi
strfind Tìm một chuỗi trong chuỗi khác
strrep Tìm và thay thế chuỗi con
strsplit Chia chuỗi tại dấu phân cách được chỉ định
strtok Các phần được chọn của chuỗi
xác thực Kiểm tra tính hợp lệ của chuỗi văn bản
symvar Xác định các biến biểu tượng trong biểu thức
regexp Khớp biểu thức chính quy (phân biệt chữ hoa chữ thường)
regexpi Khớp biểu thức chính quy (không phân biệt chữ hoa chữ thường)
regexprep Thay thế chuỗi bằng biểu thức chính quy
regexptranslate Dịch chuỗi thành biểu thức chính quy
Các hàm so sánh chuỗi
strcmp So sánh các chuỗi (phân biệt chữ hoa chữ thường)
strcmpi So sánh các chuỗi (phân biệt chữ hoa chữ thường)
strncmp So sánh n ký tự đầu tiên của chuỗi (phân biệt chữ hoa chữ thường)
strncmpi So sánh n ký tự đầu tiên của chuỗi (không phân biệt chữ hoa chữ thường)
Các chức năng thay đổi chuỗi thành chữ hoa hoặc chữ thường, tạo hoặc xóa khoảng trắng
deblank Bỏ khoảng trống ở cuối chuỗi
strtrim Xóa khoảng trắng đầu và cuối khỏi chuỗi
thấp hơn Chuyển chuỗi thành chữ thường
phía trên Chuyển chuỗi thành chữ hoa
điều chỉnh Căn đều mảng ký tự

Ví dụ

Các ví dụ sau minh họa một số hàm chuỗi được đề cập ở trên:

Định dạng chuỗi

Tạo một tệp script và nhập mã sau vào đó:

A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

ans =  3141.592654 
   3141.59 
   +3141.59 
      3141.59 
   000003141.59

Tham gia chuỗi

Tạo một tệp script và nhập mã sau vào đó:

%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, ",")

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange

Tìm và thay thế chuỗi

Tạo một tệp script và nhập mã sau vào đó:

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)

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

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
}

So sánh các chuỗi

Tạo một tệp script và nhập mã sau vào đó:

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

Khi bạn chạy tệp, nó sẽ hiển thị kết quả sau:

str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal