1 / 35

String Functions

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 =

Télécharger la présentation

String Functions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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'

More Related