SlideServe
Menu
Préférences
© SlideServe · v2026

String Functions

morton avatar
35 diapositives · 625 Views · Jul 13, 2014

String Functions. Getting Numeric Equivalents of Chars. >> double('abc xyz') ans = 97 98 99 32 120 121 122 >> double('ABC XYZ') ans = 65 66 67 32 88 89 90. Converting Numbers Back to Strings. >> x = double('here is a text') x =

String Functions - slide 1
01 / 35String Functions
1 / 17

Télécharger la présentation

String Functions
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. String Functions

  2. Getting Numeric Equivalents of Chars >> double('abc xyz') ans = 97 98 99 32 120 121 122 >> double('ABC XYZ') ans = 65 66 67 32 88 89 90

  3. Converting Numbers Back to Strings >> x = double('here is a text') x = 104 101 114 101 32 105 115 32 97 32 116 101 120 116 >> xst = char(x) xst = here is a text

  4. Converting to Upper Case • Given a string st, convert all the chars to upper case. (Matlab has built-in functions upper & lower) • Observation : the difference between the lower case and upper case of the same character is same for all characters. >> double('a') - double('A') ans = 32 >> double('f') - double('F') ans = 32

  5. Algorithm Given st : stvector = numeric vector of st For all elements in stvector do if current char lower case change the element to upper case

  6. isLower Function function result = isLower(ch) if (double(ch) >= double(‘a’) && double(ch) <= double(‘z’)) result = true; else result = false; end

  7. toUpper Function function upperst = toUpper(st) diff = double('a') - double('A'); stvector = double(st); for i=1 : length(st) if isLower(st(i)) stvector(i) = stvector(i) - diff; end end upperst = char(stvector);

  8. Converting string into integer function result = str2int( st ) result = 0; for i = 1:length(st) digitst = st(i); digit = double(digitst) - double('0'); % digitst - '0' also works result = 10 * result + digit; end

  9. Getting parts of a string • In general : st(v), where v is a vector of locations that will be included. • Examples : >> st = 'abcdefgh‘; >> st( [1 3 6] ) ans = acf >> st(2:5) ans =bcde

  10. Categorizing characters • ISLETTER True for letters of the alphabet. • ISSPACE True for white space characters. >> isletter('s') ans = 1 >> isletter('3') ans = 0 >> isspace(' ') ans = 1 >> isletter('a 3b 4e') ans = 1 0 0 1 0 0 1

  11. deblank function • DEBLANK(S) removes trailing blanks from string S. >>st = ‘ abc abc ‘; >> ['---->' deblank(st) '<-----'] ans = ----> abc abc<-----

  12. Getting Rid of Space Characters • Let’s implement a function, “trim”, similar to deblank that also removes leading spaces • Example: ‘ abc ‘  ‘abc’

  13. Trim function algorithm • Find the location of first non-space character • Find the location of the last non-space character • Return the result as the subset in between these two locations

  14. Trim function function result = trim( st ) first = 1; while (isspace(st(first))) first = first + 1; end last = length(st); while (isspace(st(last))) last = last - 1; end result = st(first:last);

  15. Trim all spaces? • Let’s write a function that removes all space characters. • Example : ‘ ab cd e f’  ‘abcdef’ • As an intermediate step, let’s first list locations of all non-space characters

  16. Listing locations of non-space characters for i = 1: length(st) if ~isspace(st(i)) disp([i]) end end • You can view this segment as generating numbers and processing them (here processing amounts to displaying on screen)

  17. Crating a locations vector • If we put these locations inside a vector, rather than displaying, we could use this vector to get all non-space characters out of our string • Let’s first look at how we can create a new vector out of user input. We will keep putting elements until user enters –1.

  18. Incrementally adding elements to a vector at command prompt >> v ??? Undefined function or variable 'v'. >> v(1) = 3; >> v v = 3 >> v(2) = 5 v = 3 5 >> v(3) = 7 v = 3 5 7

  19. Creating a new vector of unknown size from user input function v = createVect nexti = 1; x = input('enter a number >'); while (x ~= -1) v(nexti) = x; nexti = nexti + 1; x = input('enter a number >'); end

  20. Complete Program • Now we can merge the segment that generates the indices of non-space characters with the segment that creates a new vector to come up with our final solution

  21. trimAll function function result = trimAll( st ) nexti = 1; for i = 1: length(st) if ~isspace(st(i)) nonspace(nexti) = i; nexti = nexti + 1; end end result = st(nonspace);

  22. Comparing Strings • STRCMP determines if two strings are identical • STRCMPI Compare strings ignoring case. • STRNCMP Compare first N characters of strings. • STRNCMPI Compare first N characters of strings ignoring case.

  23. Examples >> strcmp('abc' , 'aBc') ans = 0 >> strcmpi('abc' , 'aBc') ans = 1 >> strncmp('abcxyz' , 'aBcpqr', 3) ans = 0 >> strncmpi('abcxyz' , 'aBcpqr', 3) ans = 1

  24. Implement strcmp function result = myStrCmp(st1, st2) if (length(st1) ~= length(st2)) result = false; else result = true; for i = 1 : length(st1) if (st1(i) ~= st2(i)) result = false; %break end end end function result = myStrCmp(st1, st2) if (length(st1) ~= length(st2)) result = false; return; end result = true; for i = 1 : length(st1) if (st1(i) ~= st2(i)) result = false; %break end end

  25. Implement strcmp function result = myStrCmp(st1, st2) if (length(st1) ~= length(st2)) result = false; return; end i=1; while (i <= length(st1) && st1(i) == st2(i)) i = i + 1; end result = ~(i <= length(st1));

  26. Implementation • Let’s implement strcmpi, strncmp, strncmpi ourselves using strcmp

  27. Implement strcmpi function result = myStrCmpi(st1, st2) if (length(st1) ~= length(st2)) result = false; return; end diff = 'a' - 'A'; i=1; while ( (i <= length(st1)) && ... ( (st1(i) == st2(i)) || ... (isletter(st1(i)) && isletter(st2(i)) && abs(st1(i) - st2(i)) == diff ) ) ) i = i + 1; end result = ~(i <= length(st1));

  28. … (first part omitted ) diff = 'a' - 'A'; i=1; equali = true; while (i <= length(st1) && equali) if (st1(i) == st2(i)) equali = true; elseif (isletter(st1(i)) && isletter(st2(i))) if (abs(st1(i) - st2(i)) == diff ) equali = true; else equali = false; end else equali = false; end i= i + 1; end result = ~(i <= length(st1));

  29. strcmpi implementation … function result = myStrCmpi(st1, st2) if (length(st1) ~= length(st2)) result = false; return; end stu1 = upper(st1); stu2 = upper(st2); result = strcmp(stu1, stu2);

  30. Strncmp implementation function result = myStrnCmp(st1, st2, n) i=1; while (i <= n && i <= length(st1) && i <= length(st2) && st1(i) == st2(i)) i = i + 1; end result = ~(i <= n);

  31. Strncmp implementation function result = myStrnCmp(st1, st2, n) if (length(st1) < n || length(st2) < n) result = false; return end stn1 = st1(1 : n); stn2 = st2(1 : n); result = strcmp(stn1, stn2);

  32. Findstr function FINDSTR Find one string within another. K = FINDSTR(S1,S2) returns the starting indices of any occurrences of the shorter of the two strings in the longer. FINDSTR is symmetric in its two arguments; that is, either S1 or S2 may be the shorter pattern to be searched for in the longer string. If you do not want this behavior, use STRFIND instead. Examples s = 'How much wood would a woodchuck chuck?'; findstr(s,'a') returns 21 findstr('a',s) returns 21 findstr(s,'wood') returns [10 23] findstr(s,'Wood') returns [] findstr(s,' ') returns [4 9 14 20 22 32]

  33. Implement findstr … • Assume the first string is the longer one. • Use strcmp on subsets of the longer string

  34. myFindStr function function result = myFindStr( st, search ) nexti = 1; for j = 1 : length(st) - length(search) + 1 if (strcmp(search, st(j : j + length(search) - 1))) result(nexti) = j; nexti = nexti + 1; end end

  35. Strrep function STRREP Replace string with another. S = STRREP(S1,S2,S3) replaces all occurrences of the string S2 in string S1 with the string S3. The new string is returned. Example: s1='This is a good example'; strrep(s1,'good','great') returns 'This is a great example' strrep(s1,'bad','great') returns 'This is a good example' strrep(s1,'','great') returns 'This is a good example'