how do I count the upper and lowercase letters in a string

I have been able to count the exact letter in a string but I’m having trouble counting the uppercase and lowercase letters for a particular letter in a string using a function. My professor has asked us not to use anything that will oversimplify the script.

5 Comments

"My professor has asked us not to use anything that will oversimplify the script."
What a strange statement! Well, we can certainly overcomplicate the code, then.
Yeah, I am this is an introduction course so we're going over some of the more simple commands and he understands that there are easier commands to use that we have not leanred yet but wants us to use what we have learned so far to complete our assignments.
... We do not know what you have learned so far.
I undestand that, but instead of me explaining in a few paragraphs everything I have learned thus far, I thought I would see what other people would come up with. If it looked similar I would try to use but if not the input is still appreciated.
Well, the easy way, and I'd argue the right and only way to do it properly in matlab would be to use isstrprop.
num_lower = nnz(isstrprop(yourstring, 'lower'));
num_upper = nnz(isstrprop(yourstring, 'upper'));
which will work properly across the whole unicode range unlike any code you'll be able to come up with which will most likely fail miserably on strings like 'ÑñƂƃ'.
But very likely, you're not allowed to use that. Problem is, we don't know what's in scope or not, so it's difficult to give you an answer.

Sign in to comment.

Answers (4)

str='UlUlUlUl'
newStr = upper(str) % make a second string converting the original too all uppercase
% then use strcmp compare the two strings
for ii=1:length(str)
idx(ii)=strcmp(str(ii),newStr(ii));
end
num_uppr=nnz(idx)
num_lwr=length(str)-num_uppr

1 Comment

Well, that's certainly one way of overcomplicating things. Note that the loop is not needed, nor strcmp. The whole thing can be simplified to:
num_uppr = nnz(str == upper(str));
num_lwr = numel(str) - num_uppr;
Note that the code will not work for strings containing non-letters, eg. digits, spaces, punctuation, etc.

Sign in to comment.

if S(K) == 'A' || S(K) == 'B' || S(K) == 'C' | S(K) == 'D' etc
or
if S(K) >= 'A' && S(K) <= 'Z'
but your professor might consider that to be oversimplifying, perhaps.
Later, when you are not under those restrictions, you could consider using ismember() or isstrprop()
str = "BEneDicT"
%Extract Letters
A = extractBefore(str,"ict")
%Count upper case letters
pat = characterListPattern('A','Z')
upper_count = count(str,pat)
I'd probably just use isstrprop, but another possibility:
s = 'Abracadabra, Hocus Pocus!';
uppercaseLettersAndNonletters = s == upper(s)
uppercaseLettersAndNonletters = 1×25 logical array
1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1
uppercaseLettersOnly = uppercaseLettersAndNonletters & isletter(s)
uppercaseLettersOnly = 1×25 logical array
1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
ULANL = blanks(strlength(s));
ULANL(uppercaseLettersAndNonletters) = s(uppercaseLettersAndNonletters)
ULANL = 'A , H P !'
ULO = blanks(strlength(s));
ULO(uppercaseLettersOnly) = s(uppercaseLettersOnly)
ULO = 'A H P '
allThreeStrings = [s; ULANL; ULO]
allThreeStrings = 3×25 char array
'Abracadabra, Hocus Pocus!' 'A , H P !' 'A H P '

Categories

Asked:

on 2 Oct 2019

Answered:

on 20 Oct 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!