Presentation is loading. Please wait.

Presentation is loading. Please wait.

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.

Similar presentations


Presentation on theme: "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."— 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 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 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 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; return; end result = true; for i = 1 : length(st1) if (st1(i) ~= st2(i)) result = false; %break end 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

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

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'


Download ppt "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."

Similar presentations


Ads by Google