MATLAB - Dizeler

MATLAB'da bir karakter dizisi oluşturmak oldukça basittir. Aslında onu birçok kez kullandık. Örneğin, komut istemine şunu yazarsınız -

my_string = 'Tutorials Point'

MATLAB yukarıdaki ifadeyi çalıştıracak ve aşağıdaki sonucu döndürecektir -

my_string = Tutorials Point

MATLAB, tüm değişkenleri diziler olarak kabul eder ve dizeler, karakter dizileri olarak kabul edilir. Kullanalımwhos yukarıda oluşturulan değişkeni kontrol etmek için komut -

whos

MATLAB yukarıdaki ifadeyi çalıştıracak ve aşağıdaki sonucu döndürecektir -

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

İlginç bir şekilde, sayısal dönüştürme işlevlerini kullanabilirsiniz. uint8 veya uint16dizedeki karakterleri sayısal kodlarına dönüştürmek için. char fonksiyon tamsayı vektörünü tekrar karakterlere dönüştürür -

Misal

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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)

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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

Dikdörtgen Karakter Dizisi

Şimdiye kadar tartıştığımız dizeler tek boyutlu karakter dizileridir; ancak bundan daha fazlasını depolamamız gerekiyor. Programımızda daha boyutlu metinsel verileri depolamamız gerekiyor. Bu, dikdörtgen karakter dizileri oluşturarak elde edilir.

Dikdörtgen bir karakter dizisi oluşturmanın en basit yolu, iki veya daha fazla tek boyutlu karakter dizisini gerektiği gibi dikey veya yatay olarak birleştirmektir.

Dizeleri dikey olarak aşağıdaki yollardan biriyle birleştirebilirsiniz -

  • MATLAB birleştirme operatörünü kullanma []ve her satırı bir noktalı virgülle (;) ayırmak. Lütfen bu yöntemde her satırın aynı sayıda karakter içermesi gerektiğini unutmayın. Farklı uzunluktaki dizeler için, gerektiğinde boşluk karakterleri ile doldurmalısınız.

  • Kullanmak charişlevi. Dizeler farklı uzunluklarda ise karakter, her satırın aynı sayıda karaktere sahip olması için kısa dizeleri sonda boşluklarla doldurur.

Misal

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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

Dizeleri aşağıdaki yöntemlerden biriyle yatay olarak birleştirebilirsiniz -

  • MATLAB birleştirme operatörünü kullanarak, []ve giriş dizelerini virgül veya boşlukla ayırmak. Bu yöntem, giriş dizilerindeki sondaki boşlukları korur.

  • Dize birleştirme işlevini kullanarak, strcat. Bu yöntem, girişlerdeki sondaki boşlukları kaldırır.

Misal

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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

Dizeleri Hücre Dizisinde Birleştirme

Önceki tartışmamızdan, dizideki tüm dizelerin aynı uzunlukta olması gerektiğinden, farklı uzunluklardaki dizeleri birleştirmenin bir acı olabileceği açıktır. Uzunluklarını eşitlemek için dizelerin sonunda boşluklar kullandık.

Bununla birlikte, dizeleri birleştirmenin daha verimli bir yolu, ortaya çıkan diziyi bir hücre dizisine dönüştürmektir.

MATLAB hücre dizisi, bir dizide farklı boyut ve veri türlerini tutabilir. Hücre dizileri, değişen uzunluktaki dizeleri depolamak için daha esnek bir yol sağlar.

cellstr işlev bir karakter dizisini dizelerden oluşan bir hücre dizisine dönüştürür.

Misal

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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

MATLAB'da String Fonksiyonları

MATLAB, dizeleri oluşturan, birleştiren, ayrıştıran, karşılaştıran ve değiştiren çok sayıda dize işlevi sağlar.

Aşağıdaki tablo, MATLAB'daki dizi işlevlerinin kısa açıklamasını sağlar -

Fonksiyon Amaç
Metni karakter dizilerinde saklamak, karakter dizilerini birleştirmek vb. İçin işlevler.
boşluklar Boş karakter dizesi oluşturun
Cellstr Karakter dizisinden hücre dizisi dizisi oluşturun
kömür Karakter dizisine (dize) dönüştür
iscellstr Girdinin dizelerin hücre dizisi olup olmadığını belirleme
ischar Öğenin karakter dizisi olup olmadığını belirleyin
sprintf Verileri dizeye biçimlendir
strcat Dizeleri yatay olarak birleştir
strjoin Hücre dizisindeki dizeleri tek dizede birleştirin
Dizelerin parçalarını tanımlama, alt dizeleri bulma ve değiştirme işlevleri
ischar Öğenin karakter dizisi olup olmadığını belirleyin
adacık Alfabetik harflerden oluşan dizi öğeleri
isspace Uzay karakterleri olan dizi öğeleri
isstrprop Dizenin belirtilen kategoride olup olmadığını belirleyin
sscanf Biçimlendirilmiş verileri dizeden oku
strfind Diğerinin içinde bir dize bulun
strrep Alt dizeyi bul ve değiştir
strsplit Dizeyi belirtilen sınırlayıcıda böl
strtok İpin seçilen kısımları
onaylayan Metin dizesinin geçerliliğini kontrol edin
Symvar İfadede sembolik değişkenleri belirle
regexp Normal ifadeyi eşleştir (büyük / küçük harfe duyarlı)
regexpi Normal ifadeyi eşleştir (büyük / küçük harfe duyarlı değildir)
regexprep Normal ifade kullanarak dizeyi değiştirin
regexptranslate Dizeyi normal ifadeye çevir
Dize karşılaştırması için işlevler
strcmp Dizeleri karşılaştırın (büyük / küçük harfe duyarlı)
strcmpi Dizeleri karşılaştırın (büyük / küçük harfe duyarlı değildir)
strncmp Dizelerin ilk n karakterini karşılaştırın (büyük / küçük harfe duyarlı)
strncmpi Dizelerin ilk n karakterini karşılaştırın (büyük / küçük harfe duyarlı değildir)
Dizeyi büyük veya küçük harfe çevirme, boşluk oluşturma veya kaldırma işlevleri
deblank Dizenin sonundaki boşlukları soyun
strtrim Dizeden baştaki ve sondaki beyaz boşluğu kaldırın
aşağı Dizeyi küçük harfe dönüştür
üst Dizeyi büyük harfe dönüştür
strjust Karakter dizisini iki yana yasla

Örnekler

Aşağıdaki örnekler, yukarıda bahsedilen dize işlevlerinden bazılarını göstermektedir -

Dizeleri Biçimlendirme

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

ans =  3141.592654 
   3141.59 
   +3141.59 
      3141.59 
   000003141.59

Dizelere Katılma

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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

Dizeleri Bulma ve Değiştirme

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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)

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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
}

Dizeleri Karşılaştırma

Bir komut dosyası oluşturun ve aşağıdaki kodu içine yazın -

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

Dosyayı çalıştırdığınızda, aşağıdaki sonucu görüntüler -

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