MATLAB Rad sa stringovima Osnovno o stringovima String
MATLAB Rad sa stringovima
Osnovno o stringovima § String u MATLAB-u je niz karaktera. § Stringovi se zadaju pod apostrofima: s = 'Trebinje 2015' § Pošto je string niz, pojedinačnim elementima pristupamo isto kao kod numeričkih nizova. Na primer: >> s = 'Trebinje 2015'; >> disp(s) Trebinje 2015 >> disp(s(1: 5)) Trebi >> disp(s(1: 2: end)) Teij 05 >> disp(s(end: -1: 1)) 5102 ejniber. T
ASCII tabela kodova karaktera Kod 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Taster ili simbol (razmaknica) ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < Kod 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 Taster ili simbol = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Kod 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 Taster ili simbol Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v Kod 119 120 121 122 123 124 125 126 Taster ili simbol w x y z { | } ~
Funkcije abs i char § Svakom karakteru je dodeljen jedinstven prirodan broj, koga nazivamo ASCII kôd karaktera. ASCII je šema za kodiranje karaktera. § Funkcija abs vraća ASCII kôd karaktera argumenta, dok char vraća karakter koji odgovara ASCII kôdu argumenta funkcije. >> s = 'ABC 123 abc'; >> kodovi = abs(s) kodovi = 65 66 67 49 >> char(kodovi) ans = ABC 123 abc 50 51 97 98 99
Nadovezivanje stringova § Stringovi se u MATLAB-u vrlo jednostavno nadovezuju na sledeći način: s = [s 1, s 2] § Primer: >> s 1 = 'Majka Mari '; >> s 2 = 'kose plela'; >> s = [s 1, s 2]; >> disp(s) Majka Mari kose plela
Poređenje stringova § Za poređenje stringova se koristi funkcija strcmp(s 1, s 2), § § koja poredi stringove s 1 i s 2. strcmp vraća logičku 1 (true) ako su stringovi identični (svi karakteri isti, pravi se razlika između velikih i malih slova), i logičku 0 (false) ako nisu. Slična funkcija je strcmpi(s 1, s 2), koja ne pravi razliku između malih velikih slova. >> s 1 = 'Trebinje'; >> s 2 = 'TREBINJE'; >> disp(strcmp(s 1, s 2)) 0 >> disp(strcmpi(s 1, s 2)) 1
Pretraga stringova § Za određivanje da li string sadrži dati podstring, može § poslužiti funkcija findstr(s 1, s 2), koja pronalazi sve pozicije na kojima se string s 2 pojavljuje u stringu s 1. Ukoliko string s 2 ne postoji u s 1, findstr vraća prazan string. >> findstr('Banana', 'na') ans = 3 5 >> findstr('Jabuka', 'na') ans = []
Funkcija strrep § Funkcija strrep(s 1, s 2, s 3) u stringu s 1 menja string s 2 stringom s 3. >> >> a = 'dan kao svaki drugi dan'; b = 'dan'; c = 'covek'; strrep(a, b, c) ans = covek kao svaki drugi covek
Funkcije upper i lower § Funkcija upper(s) sva mala slova u stringu s pretvara u § velika, ostale karaktere ne menja. Funkcija lower(s) sva velika slova u stringu s pretvara u mala, ostale karaktere ne menja. >> upper('Jabuka') ans = JABUKA >> lower('JABUKA') ans = jabuka
Određivanje opsega karaktera § Uočimo i iz ASCII tabele sledeće: o Slova (mala i velika) su poređana u prirodno rastućem redosledu o o engleskog alfabeta (A, B, C, D, . . . , a, b, c, d, . . . ), Cifre su poređane u rastući redosled (0, 1, 2, 3, . . . ), Skupovi malih i velikih slova se ne nadovezuju jedan na drugi (prvo dolaze velika slova, pa nekoliko specijalnih karaktera, pa mala slova). § Ove osobine možemo iskoristiti da proverimo da li karakter pripada skupu malih slova, velikih slova ili cifara. s(i)>='a' & s(i)<='z' uslov da je s(i) malo slovo s(i)>='A' & s(i)<='Z' uslov da je s(i) veliko slovo s(i)>='0' & s(i)<='9' uslov da je s(i) cifra § Za proveru da li je karakter stringa slovo, može poslužiti funkcija isletter(s(i)), koja vraća 1 ako je s(i) slovo (veliko ili malo) i 0 u suprotnom.
Funkcija isstrprop § Koristeći funkciju isstrprop(s, k), možemo odrediti da li elementi stringa s pripadaju kategoriji k. Neke od kategorija karaktera su: o Slova (velika i mala) o Velika ili mala slova o Cifre o Slova i cifre (alfanumerički karakteri) o Beline (spejs, tab, Enter) § Na primer, za string s='Trebinje 2015', imamo: isstrprop(s(1), 'digit') vraća 0 isstrprop(s(1), 'alpha') vraća 1, isto kao funkcija isletter isstrprop(s(1), 'alphanum') vraća 1 isstrprop(s, 'alpha') vraća [1 1 1 1 0 0 0] isstrprop(s, 'wspace') vraća [0 0 0 0 1 0 0]
Funkcija num 2 str § Funkcija num 2 str(x) konvertuje broj x u odgovarajući string. Na primer, num 2 str(-34. 21) vraća string '-34. 21'. § Kad se primeni na matricu, vraća matricu stringova: >> num 2 str([2. 3, 0. 17; -45. 01, 100]) ans = 2. 3 0. 17 -45. 01 100 § Funkcija num 2 str je pogodna za kreiranje stringova koji sadrže numeričke podatke (title, xlabel, ylabel, text). >> x = 23. 21; >> s = ['Vrednost x-a je: ' num 2 str(x)]; >> disp(s) Vrednost x-a je: 23. 21
Funkcija eval § Pomoću funkcije eval(s) možemo izračunati vrednost § izraza definisanog stringom s. Primeri: eval('147') vraća broj 147 eval('147+100') vraća broj 247 eval('2*147/67') vraća broj 4. 3881 x=2; eval('2*x-7') vraća broj -2 x=2; y=5; eval('(x-y)^2') vraća broj 9 x=2. 11; eval('sin(x)') vraća broj 0. 8581
Primer sa stringom § Napisati funkcijski m-fajl karakteri koji određuje i vraća koliko se u stringu S nalazi slova (malih i velikih), koliko cifara i koliko ostalih karaktera. String S je ulazni argument funkcijskog fajla, dok su broj slova, cifara i ostalih karaktera izlazni argumenti. function [bs, bc, bo] = karakteri(S) bs=0; bc=0; bo=0; for i=1: length(S) Jedno izvršenje if (isletter(S(i))==1) >> s = 'Orson Vels: 1984' bs=bs+1; elseif S(i)>='0' & S(i)<='9' >> [a, b, c] = karakteri(s) a = bc=bc+1; 9 else b = bo=bo+1; 4 end c = end 3
Drugi primer sa stringom § Napisati funkcijski m-fajl palindrom čiji je ulazni argument string S, i koji ispituje da li je S palindrom, odnosno da li se jednako čita sa obe strane. Ukoliko je S palindrom fajl vraća broj 1, a u suprotnom 0. Obratiti pažnju da položaj razmaka ne utiče na donošenje odluke da li je S palindrom i da se ne pravi razlika između malih i velikih slova. function jeste. Nije = palindrom(S) T = []; for i = 1 : length(S) if S(i) ~= ' ' T = [T, S(i)]; end Uklanjanje spejsova Tobrnuto = T(end: -1: 1); jeste. Nije = strcmpi(T, Tobrnuto); Ne pravimo razliku između malih i velikih slova
Za vežbu § Napisati funkciju binar koja za ulazni argument ima string S i koja vraća 1 ukoliko taj string može predstavljati binarni zapis broja i 0 u suprotnom. String može predstavljati binarni zapis broja ukoliko nema drugih karaktera osim 0 i 1. Razmisliti o varijaciji za oktalni i heksadecimalni zapis broja. § Napisati funkciju podstringovi koji za ulazni argument ima string S i koja vraća tri stringa: o string koji se sastoji samo od slova (velikih i malih) iz stringa S, o string koji se sastoji samo od cifara iz stringa S, o string koji se sastoji od svih ostalih karaktera iz stringa S.
- Slides: 16